파이썬: xls, xlsx 파일 읽고 쓰기

엑셀파일(xls, xlsx) 읽고 쓰기

import numpy as np
import pandas as pd
  • xls, xlsx 파일의 읽는 방법이 다르다.
# xls 읽기 vs xlsx 읽기
df = pd.read_excel('a.xls')  
# 확장자:.xlsx이면 engine='openpyxl' #df = pd.read_excel('a.xlsx', engine='openpyxl')
x = df.loc[0, :] # 0번 레코드의 모든 값
df
이름 사회 지리 과학
0 aaa 43 65 87
1 bbb 67 43 65
2 ccc 12 76 54
3 ddd 54 89 43
4 eee 43 95 56
# 특정 컬럼을 인덱스로 지정하여 읽어오기
df = pd.read_excel('a.xlsx', engine='openpyxl', index_col='이름')  #index_col=0
df
국어 영어 수학
이름
aaa 43 65 87
bbb 67 43 65
ccc 12 76 54
ddd 54 89 43
eee 43 95 56

</div>

df = pd.read_excel('a.xlsx', engine='openpyxl')

# 쓰기 함수
wr = pd.ExcelWriter('b.xlsx', engine='xlsxwriter') #작성자 객체 생성
# df에 있는 내용을 엑셀 파일을 생성하고 그곳에 저장하라
df.to_excel(wr, index=False) #sheet_name='Sheet3'
# index는 지정하지 않음
wr.save()
res = []
for i in [0,2]:#0, 2번 시트 파일 처리
    df = pd.read_excel('a.xlsx', engine='openpyxl', sheet_name=i)
    print(df)
    res.append(df)#배열에 추가
    
res[0].append(res[1]) #DataFrame 병합
    이름  국어  영어  수학
0  aaa  43  65  87
1  bbb  67  43  65
2  ccc  12  76  54
3  ddd  54  89  43
4  eee  43  95  56
   이름  국어  영어  수학
0  가나  98  87  36
1  다라  67  43  65
2  마바  12  76  54
이름 국어 영어 수학
0 aaa 43 65 87
1 bbb 67 43 65
2 ccc 12 76 54
3 ddd 54 89 43
4 eee 43 95 56
0 가나 98 87 36
1 다라 67 43 65
2 마바 12 76 54
res = []
for i in range(0, 2):
    df = pd.read_excel('a.xlsx', engine='openpyxl', sheet_name=i)
    print(df)
    res.append(df)
    
res[0].merge(res[1])      
    
    이름  국어  영어  수학
0  aaa  43  65  87
1  bbb  67  43  65
2  ccc  12  76  54
3  ddd  54  89  43
4  eee  43  95  56
    이름  사회  지리  과학
0  aaa  43  65  87
1  bbb  67  43  65
2  ccc  12  76  54
3  ddd  54  89  43
4  eee  43  95  56
이름 국어 영어 수학 사회 지리 과학
0 aaa 43 65 87 43 65 87
1 bbb 67 43 65 67 43 65
2 ccc 12 76 54 12 76 54
3 ddd 54 89 43 54 89 43
4 eee 43 95 56 43 95 56
 #현재 작업 디렉토리(./)에서 문자 패턴과 일치하는 .xlsx파일명 읽음
import glob
files = glob.glob('./*.xlsx') # glob.glob(조건): 조건에 맞는 파일명들을 리스트로 반환
res = []
print(files)
for i in files:
    df = pd.read_excel(i, engine='openpyxl')
    print(df)
    res.append(df)
x = res[0].append(res[1])
['.\\a.xlsx', '.\\b.xlsx']
    이름  국어  영어  수학
0  aaa  43  65  87
1  bbb  67  43  65
2  ccc  12  76  54
3  ddd  54  89  43
4  eee  43  95  56
    이름  국어  영어  수학
0  aaa  43  65  87
1  bbb  67  43  65
2  ccc  12  76  54
3  ddd  54  89  43
4  eee  43  95  56
# 엑셀파일 생성 + 쓰기
wr = pd.ExcelWriter('c.xlsx', engine='xlsxwriter') # 채울 내용을 담은 엑셀파일 읽어오기
x.to_excel(wr, index=False, sheet_name='fileA_and_fileB') #sheet_name='Sheet3'
wr.save()
glob.glob('c.xlsx')   #파일 생성 확인. 있으면 파일명이 포함된 리스트가 반환될 것
['c.xlsx']
# 위에서 엑셀파일에 쓴 내용은 x에 저장됨
x.sum(axis=1)
x.mean(axis=1)
0    195
1    175
2    142
3    186
4    194
0    195
1    175
2    142
3    186
4    194
dtype: int64
엑셀파일 읽기 예제
# 참고용 예제
res = []
for i in range(0, 2):
    df = pd.read_excel('a.xlsx', engine='openpyxl', sheet_name=i)
    print(df)
    res.append(df)
    
x = res[0].merge(res[1])  #국영수 쉬트와 사,지,과 쉬트 병합하여 x에 저장
t = x.sum(axis=1)         #각 행의 총합
a = x.mean(axis=1)        #각 행의 평균
x['total']=t              #총합 결과를 total컬럼으로 추가
x['avg']=a                #평균 결과를 avg 컬럼으로 추가

wr = pd.ExcelWriter('c.xlsx', engine='xlsxwriter')
x.to_excel(wr, index=False, sheet_name='result') #sheet_name='Sheet3'
wr.save()
    이름  국어  영어  수학
0  aaa  43  65  87
1  bbb  67  43  65
2  ccc  12  76  54
3  ddd  54  89  43
4  eee  43  95  56
    이름  사회  지리  과학
0  aaa  43  65  87
1  bbb  67  43  65
2  ccc  12  76  54
3  ddd  54  89  43
4  eee  43  95  56

Leave a comment