HOWTO · Pandas
Pandas 데이터 프레임을 Excel 파일로 내보내기
Pandas DataFrame을 Excel 파일로 내보내는 방법과 `to_excel()` 및 `ExcelWriter`를 사용하는 방법을 알아봅니다.
이 페이지의 내용
Pandas DataFrame은 DataFrame.to_excel()을 사용해 Excel 통합 문서로 내보낼 수 있습니다. 행 레이블을 워크시트 열로 표시하지 않으려면 index=False로 설정하세요. 여러 테이블을 하나의 통합 문서에 쓰거나 작성 엔진을 설정해야 할 때는 ExcelWriter를 사용하세요.
to_excel()로 DataFrame을 Excel 파일로 내보내기
파일 이름과 함께 to_excel()을 호출하면 하나의 DataFrame을 저장할 수 있습니다. 기본적으로 Pandas는 DataFrame 인덱스를 워크시트의 첫 번째 열로 씁니다. 워크시트에 이름이 지정된 DataFrame 열만 포함하려면 index=False를 전달하세요. 사용할 수 있는 옵션은 DataFrame.to_excel() 참조 문서에서 확인할 수 있습니다.
이 예제는 간단한 판매 테이블을 만들고 열을 현재 작업 디렉터리의 sales.xlsx에 씁니다. Pandas는 .xlsx 파일에 사용할 설치된 Excel 작성 엔진을 선택합니다. 환경에 지원되는 엔진이 없다면 openpyxl 또는 XlsxWriter 같은 엔진을 설치하세요.
import pandas as pd
sales = pd.DataFrame(
{
"product": ["Keyboard", "Mouse"],
"units": [12, 25],
}
)
sales.to_excel("sales.xlsx", index=False)
print("Saved sales.xlsx")
Saved sales.xlsx
저장된 통합 문서에는 추가 인덱스 열 없이 product와 units 열이 포함됩니다. 이 열 레이블은 변경되지 않은 예제에서 영어로 유지됩니다. 행 레이블도 넣으려면 index=False를 생략하세요. 상대 파일 이름은 프로세스의 현재 작업 디렉터리를 기준으로 해석됩니다. 다른 위치에 저장하려면 절대 경로나 디렉터리를 포함한 경로를 지정하세요.
스프레드시트를 어떻게 사용할지에 따라 인덱스 설정을 선택하세요. DataFrame 인덱스에 열에 이미 저장되지 않은 식별자처럼 의미 있는 행 레이블이 있다면 인덱스를 유지하세요. 이름이 지정된 데이터 열만 보여 주거나 다른 시스템에서 고정된 헤더 집합을 기대한다면 인덱스를 끄세요. 이 설정은 ExcelWriter를 통해 호출하는 경우를 포함해 각 to_excel() 호출에서 지정할 수 있습니다.
프로세스가 쓸 수 있는 경로를 선택하고, 필요한 경우 먼저 상위 디렉터리를 만드세요. Pandas는 통합 문서 파일을 쓰지만 없는 디렉터리를 만들지는 않습니다. 전체 경로를 전달하면 스크립트를 실행한 디렉터리와 관계없이 저장 위치를 지정할 수 있습니다. 이렇게 하면 편집기, 노트북 또는 예약 작업에서 코드를 실행할 때 통합 문서의 위치를 쉽게 파악할 수 있습니다.
ExcelWriter로 DataFrame 쓰기
통합 문서 생성을 제어하거나 둘 이상의 DataFrame을 써야 할 때는 ExcelWriter를 컨텍스트 관리자로 사용하세요. 코드 블록이 끝나면 컨텍스트 관리자가 통합 문서를 닫고 저장을 마무리합니다. Pandas는 기본적으로 설치된 Excel 작성 엔진을 선택합니다. 필요한 경우 openpyxl 또는 XlsxWriter 같은 지원 엔진을 설치하세요.
import pandas as pd
students = pd.DataFrame(
{
"student": ["Sam", "Ali", "Sara"],
"marks": [88, 93, 79],
}
)
with pd.ExcelWriter("student-results.xlsx") as writer:
students.to_excel(writer, sheet_name="Results", index=False)
print("Saved student-results.xlsx")
Saved student-results.xlsx
작성기에는 to_excel()을 통해 DataFrame을 전달하고, sheet_name으로 워크시트 탭 이름을 지정합니다. 작성기의 save() 메서드를 직접 호출하는 대신 컨텍스트 관리자를 사용하세요. 블록이 일찍 종료되는 경우에도 컨텍스트 관리자가 저장을 마무리합니다. 다른 경로를 지정하지 않으면 파일은 현재 작업 디렉터리를 기준으로 생성됩니다.
여러 DataFrame을 별도의 Excel 워크시트로 내보내기
같은 ExcelWriter 객체를 각 DataFrame의 to_excel() 호출에 전달하면 여러 테이블을 하나의 통합 문서에 넣을 수 있습니다. 각 호출에 서로 다른 sheet_name을 지정하면 독자가 각 테이블을 별도의 워크시트에서 찾을 수 있습니다. 다음 예제는 세 개의 과목별 테이블을 하나의 통합 문서에 씁니다. Pandas와 설치된 Excel 작성 엔진이 필요합니다.
import pandas as pd
science = pd.DataFrame({"student": ["Ali", "Umar"], "score": [88, 60]})
computing = pd.DataFrame({"student": ["Ali", "Umar"], "score": [73, 63]})
arts = pd.DataFrame({"student": ["Ali", "Umar"], "score": [95, 63]})
with pd.ExcelWriter("student-results.xlsx") as writer:
science.to_excel(writer, sheet_name="Science", index=False)
computing.to_excel(writer, sheet_name="Computing", index=False)
arts.to_excel(writer, sheet_name="Arts", index=False)
print("Saved student-results.xlsx with three worksheets")
Saved student-results.xlsx with three worksheets
세 호출 모두 같은 통합 문서를 대상으로 하며, 각 호출의 sheet_name 값이 워크시트 이름을 정합니다. 워크시트 이름은 서로 달라야 하고 Excel의 워크시트 이름 제한을 따라야 합니다. Pandas에서 사용할 수 있는 Excel 작성 엔진이 없다고 알리면 스크립트를 실행하는 환경에 openpyxl 또는 XlsxWriter 같은 지원 엔진을 설치하세요.