Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 데이터프레임을 여러 시트가 있는 Excel 파일로 내보내는 방법

데이터 분석 작업을 하다 보면 하나의 데이터프레임을 Excel 파일의 여러 시트에 나누어 저장해야 하는 경우가 자주 발생합니다. 예를 들어, 하나의 데이터프레임을 'first_sheet', 'second_sheet', 'third_sheet'라는 세 개의 시트로 내보낸다고 가정해 보겠습니다.

해결 방법

이 문제는 아래 단계를 따라 해결할 수 있습니다.

  • xlsxwriter 모듈 임포트: Excel 변환을 위해 xlsxwriter 모듈을 사용합니다. 설치되어 있지 않다면 pip install XlsxWriter 명령으로 먼저 설치하세요.

  • 데이터프레임 정의: 내보낼 데이터프레임을 정의하고 df 변수에 할당합니다.

  • ExcelWriter 객체 생성: pd.ExcelWriter 함수에 생성할 Excel 파일 이름을 지정하고, engine 매개변수를 'xlsxwriter'로 설정합니다.

excel_writer = pd.ExcelWriter('pandas_df.xlsx', engine='xlsxwriter')
  • 여러 시트로 내보내기: to_excel 메서드를 호출할 때 sheet_name 매개변수에 서로 다른 시트 이름을 지정하면, 하나의 파일 안에 여러 개의 시트로 데이터가 저장됩니다.

df.to_excel(excel_writer, sheet_name='first_sheet')
df.to_excel(excel_writer, sheet_name='second_sheet')
df.to_excel(excel_writer, sheet_name='third_sheet')
  • 파일 저장: 마지막으로 save() 메서드를 호출하여 변경 사항을 파일에 저장합니다.

excel_writer.save()

전체 예제 코드

아래 코드를 통해 전체 과정을 더 쉽게 이해할 수 있습니다.

import pandas as pd
import xlsxwriter

df = pd.DataFrame({'Fruits': ["Apple","Orange","Mango","Kiwi"],
                   'City' : ["Shimla","Sydney","Lucknow","Wellington"]
                  })
print(df)

excel_writer = pd.ExcelWriter('pandas_df.xlsx', engine='xlsxwriter')
df.to_excel(excel_writer, sheet_name='first_sheet')
df.to_excel(excel_writer, sheet_name='second_sheet')
df.to_excel(excel_writer, sheet_name='third_sheet')
excel_writer.save()

실행 결과

위 코드를 실행하면 'pandas_df.xlsx'라는 이름의 Excel 파일이 생성되며, 파일 안에는 동일한 데이터가 담긴 세 개의 시트(first_sheet, second_sheet, third_sheet)가 포함됩니다.

참고: 최신 판다스 버전 사용 시 주의사항

pandas 1.5.0 이상 버전에서는 save() 메서드가 더 이상 사용되지 않으며(deprecated), 대신 close() 메서드나 with 문을 사용하는 것이 권장됩니다.

# 방법 1: close() 사용
excel_writer = pd.ExcelWriter('pandas_df.xlsx', engine='xlsxwriter')
df.to_excel(excel_writer, sheet_name='first_sheet')
df.to_excel(excel_writer, sheet_name='second_sheet')
df.to_excel(excel_writer, sheet_name='third_sheet')
excel_writer.close()

# 방법 2: with 문 사용 (자동으로 파일 저장 및 닫기)
with pd.ExcelWriter('pandas_df.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='first_sheet')
    df.to_excel(writer, sheet_name='second_sheet')
    df.to_excel(writer, sheet_name='third_sheet')