본문 바로가기

카테고리 없음

[파이썬] pandas 데이터프레임을 엑셀로 저장하기, 둘 이상의 엑셀 시트로 저장하기: to_excel(), pd.ExcelWriter()

판다스 데이터프레임을 엑셀 형태로 저장하기 위해서는 to_excel() 메서드를 사용하면 됩니다. 이때 메서드의 매개 변수로 저장할 파일의 이름을 전달합니다. 경로를 별도 지정하지 않는다면 현재 스크립트가 위치한 폴더에 엑셀 파일이 생성됩니다. 샘플 데이터를 보겠습니다.

 

import pandas as pd

# 샘플 데이터프레임 생성
inventors = pd.DataFrame(
    {
        'name': ['Nikola Tesla', 'Thomas Edison', 'Henry Ford'],
        'born': ['1856/07/10', '1847/02/11', '1863/07/30'],
        'died': ['1943/01/07', '1931/10/18', '1947/04/07'],
        'age': [86, 84, 83]
})

# 결과 출력
inventors

 

to_excel()를 사용해서 엑셀로 저장하기

# 매개 변수로 저장할 파일 이름을 전달합니다.
inventors.to_excel('inventors.xlsx')

파일 이름 앞에 별도의 경로를 지정하지 않았기 때문에, 스크립트의 위치와 같은 폴더에 엑셀 파일이 생성되었습니다. 저장된 엑셀 파일을 열어보면 데이터프레임이 잘 저장된 것을 볼 수 있습니다.

 

 

인덱스 없이 저장하는 것도 가능합니다.

# 이제 인덱스는 저장되지 않습니다.
inventors.to_excel('inventors.xlsx', index=False)

 

하나의 데이터프레임을 엑셀로 저장하는 것은 매우 간단합니다. 만약 하나의 데이터프레임을 특정 조건에 따라 여러 개의 시트로 나누어서 저장해야 한다면 어떻게 해야 할까요? 또는 여러 개의 데이터프레임을 여러 개의 시트로 나누어서 저정해 야한 다면 어떻게 해야 할까요? 

 

아쉽지만 to_excel() 메서드로는 불가능합니다. to_excel() 메서드는 통합 문서가 저장되면 전체 통합 문서를 다시 쓰지 않고서는 추가 데이터를 쓸 수 없기 때문입니다. 여러 개의 시트로 저장하기 위해서는 pd.ExcelWriter() 클래스를 사용해야 합니다.

 

pd.ExcelWriter()를 사용해서 둘 이상의 엑셀 시트로 저장하기

with pd.ExcelWriter('inventors.xlsx') as writer:
    inventors[inventors.name == 'Nikola Tesla'].to_excel(writer, sheet_name='Nikola Tesla')
    inventors[inventors.name == 'Thomas Edison'].to_excel(writer, sheet_name='Thomas Edison')
    inventors[inventors.name == 'Henry Ford'].to_excel(writer, sheet_name='Henry Ford')    

 

이름에 따라 개별 시트에 저장된 것을 볼 수 있습니다. 아래 코드처럼 조금 더 간단히 작성할 수도 있습니다.

with pd.ExcelWriter('inventors.xlsx') as writer:
    for name in inventors.name:
        inventors[inventors.name == f'{name}'].to_excel(writer, sheet_name=f'{name}')

with문에 대해서 궁금하시다면 점프 투 파이썬을 참고해주세요. (링크)

 

 

-이 글은 아나콘다(Anaconda3)가 설치된 환경을 기준으로 작성되었습니다.