엑셀 문서를 다룰 때 쓰는 파이썬 모듈 - pandas, openpyxl, xlwings, win32com
파이썬으로 엑셀 문서를 다룰 수 있는 모듈은 꽤 여러가지가 있다.
필자가 아는 것만해도 pandas + openpyxl, xlwings, win32com 등 이미 여러개이다.
xlwings는 엑셀 프로그램에서 vba와 직접 연동할 때 유용하고, win32com은 엑셀 프로그램을 직접 열어서 제어할 때 유용하다. 보통 win32com을 활용해서 엑셀 문서를 읽고 쓸 일이 별로 없는데, 간혹 보안이 걸려있거나 암호화되어있어 다른 접근으로 문서 내용 확인이 안 될때 문서를 직접 열어서 데이터를 가져오는 방식으로 활용할 수 있다.
이 글에서는 가장 범용적으로 쉽게 활용할 수 있는 pandas를 활용해 엑셀 문서를 불러오고 저장하는 것에 대해 소개하고자 한다.
공공데이터 포털에서 샘플로 "공무원연금공단_시군구별 성별 연금수급자 인원수" 파일을 하나 다운받아 활용해보자.
엑셀 문서를 읽을 때 쓰는 함수 - pandas.read_excel()
엑셀 파일을 읽어올 때는 pandas의 read_excel 을 활용하면 된다.
만약 엑셀 파일에 여러 시트가 있고 특정 시트만 불러오고 싶다면 sheet_name 옵션을 활용할 수 있다.
이 파일의 경우 Data 시트가 1개뿐이어서 결과가 똑같다. 관련하여 좀 더 복잡한 옵션들은 다음 블로그를 참조.
엑셀 문서를 쓰고 싶을 때 쓰는 함수 - df.to_excel()
이제 반대로 pandas의 DataFrame 구조의 파일을 excel 파일로 저장해보자. 이 때는 to_excel 함수를 사용한다.
to_excel 함수를 실행시 openpyxl 모듈이 없다고 오류가 날 수 있다. 없으면 설치해주자. 이 경우에도 해당 DataFrame 데이터를 특정 이름의 시트에 저장하고 싶다면 shee_name에 시트명을 지정해주면 된다.
엑셀 문서 하나에 여러 시트를 쓰고 싶을 때 쓰는 함수 - pandas.ExcelWriter()
마지막으로 2개 이상의 DataFrame 데이터를 하나의 엑셀 파일에 시트별로 저장하고 싶을 수 있다. 그럼 같은 파일에 to_excel 함수를 두 번 쓰면 안되나? 싶지만 그럼 다음과 같은 결과가 나온다.
import pandas as pd
df = pd.read_excel('공무원연금공단_시군구별 성별 연금수급자 인원수_20211231.xlsx', sheet_name='Data')
df1 = df
df2 = df
df1.to_excel('테스트.xlsx', sheet_name='시트1')
df2.to_excel('테스트.xlsx', sheet_name='시트2')
to_excel 함수를 실행할 때마다 새로 파일을 만들기 때문에 df1.to_excel로 쓴 결과가 사라지고 없음을 알 수 있다. 이런 경우엔 다음과같이 pd.ExcelWriter()로 객체를 지정한 이후 파일을 쓰고 종료를 해야 파일 하나에 여러 시트를 쓰는 것이 가능하다.
import pandas as pd
df = pd.read_excel('공무원연금공단_시군구별 성별 연금수급자 인원수_20211231.xlsx', sheet_name='Data')
df1 = df
df2 = df
with pd.ExcelWriter('테스트.xlsx') as writer:
df1.to_excel(writer, sheet_name='시트1')
df2.to_excel(writer, sheet_name='시트2')
'초딩도 할 수 있는 파이썬 자동화' 카테고리의 다른 글
[초딩도 할 수 있는 파이썬] 파이썬으로 요일, 휴일, 공휴일 가져오기 (0) | 2022.10.02 |
---|---|
[초딩도 할 수 있는 파이썬] ModuleNotFoundError: No module named ~~ 에러가 뜨는 경우 (0) | 2022.09.29 |
[초딩도 할 수 있는 파이썬] 티스토리 자동 로그인하기 (0) | 2022.09.29 |
[초딩도 할 수 있는 파이썬] 강추 무료 학습 사이트 TOP 3 (2) | 2022.09.25 |
[초딩도 할 수 있는 파이썬] 네이버 많이 본 TV연예 뉴스 가져오기 (0) | 2022.09.23 |