가공 끝난 데이터, 파이썬으로 엑셀 시트(Sheet) 여러 개로 쪼개서 저장하기

파이썬으로 수만 줄의 데이터를 불러와 조건에 맞게 필터링하고 빈칸까지 깔끔하게 청소했습니다. 이제 이 완벽한 데이터를 엑셀로 저장해서 팀장님께 보고할 일만 남았습니다. 그런데 팀장님의 지시사항이 하나 더 떨어집니다. "이번 달 전체 실적 데이터, 부서별로 엑셀 탭(시트) 나눠서 하나의 파일로 정리해 주세요."

엑셀만 다룰 줄 알던 시절이라면 어떻게 했을까요? '영업팀'으로 필터링해서 복사하고, 아래쪽의 + 버튼을 눌러 새 시트를 만든 뒤 붙여넣고, 시트 이름을 '영업팀'으로 바꿉니다. 그리고 이 짓을 인사팀, 마케팅팀, 재무팀... 부서 개수만큼 무한 반복합니다. 부서가 20개라면 20번을 반복해야 하죠. 하지만 파이썬에서는 판다스의 숨겨진 무기 하나만 꺼내면 클릭 한 번에 20개의 시트가 알아서 척척 만들어집니다.


1. to_excel()의 치명적 한계

2편에서 우리는 데이터를 엑셀로 내보낼 때 df.to_excel('결과.xlsx') 라는 코드를 쓴다고 배웠습니다. 그렇다면 영업팀 데이터(df_sales)와 인사팀 데이터(df_hr)를 각각 저장하려면 이렇게 쓰면 될까요?

df_sales.to_excel('결과.xlsx', sheet_name='영업팀') df_hr.to_excel('결과.xlsx', sheet_name='인사팀')

이 코드를 실행하고 엑셀 파일을 열어보면, 안타깝게도 '인사팀' 시트 딱 하나만 남아있을 것입니다. to_excel() 함수는 기본적으로 파일을 **'새로 덮어쓰기'**하기 때문입니다. 영업팀 시트를 기껏 만들어놨더니, 그 다음 줄에서 인사팀 데이터가 기존 파일을 싹 밀어버리고 혼자 자리를 차지한 것이죠.


2. 엑셀의 바인더 역할을 하는 마법사: pd.ExcelWriter

여러 개의 시트를 하나의 파일에 차곡차곡 모으려면, 파이썬에게 "이 엑셀 파일 아직 닫지 말고 열어둬! 내가 시트를 계속 추가할 거야!"라고 알려주는 특별한 도구가 필요합니다. 그것이 바로 pd.ExcelWriter 입니다. 일종의 '엑셀 바인더'라고 생각하시면 이해하기 쉽습니다.

사용법은 아주 직관적입니다. 먼저 바인더를 하나 만듭니다. writer = pd.ExcelWriter('부서별_최종실적.xlsx')

그리고 아까 실패했던 코드에서 저장 위치를 파일 이름 대신 이 '바인더(writer)'로 바꿔줍니다. df_sales.to_excel(writer, sheet_name='영업팀') df_hr.to_excel(writer, sheet_name='인사팀')

마지막으로 바인더를 꽉 닫아줍니다. 이 닫아주는 과정이 없으면 파일이 저장되지 않으니 절대 잊으시면 안 됩니다! writer.close()

이렇게 단 4줄의 코드만 적어주면, 하나의 파일 안에 영업팀 시트와 인사팀 시트가 다소곳이 나뉘어 들어간 완벽한 보고서가 탄생합니다.


3. 실무자 필수 팁: index=False의 비밀

파이썬으로 엑셀을 저장할 때 초보자들이 100% 겪는 짜증 나는 현상이 하나 있습니다. 엑셀 파일을 열어보면 A열에 0, 1, 2, 3... 같은 쓸데없는 일련번호가 잔뜩 적혀있는 것입니다. 파이썬이 데이터를 다룰 때 내부적으로 쓰던 행 번호(Index)를 눈치 없이 엑셀까지 그대로 끌고 온 탓입니다.

이 불필요한 번호표를 빼고 깔끔하게 알맹이 데이터만 저장하려면, 코드를 쓸 때 반드시 index=False 라는 마법의 옵션을 껴주어야 합니다.

df_sales.to_excel(writer, sheet_name='영업팀', index=False)

이 옵션은 판다스를 쓰는 실무자라면 숨 쉬듯 자연스럽게 입력해야 하는 아주 중요한 습관입니다.


반복문(for)과 결합하면 진정한 자동화의 완성

만약 우리 회사의 부서가 50개라면 코드를 50줄 써야 할까요? 아닙니다. 5편에서 배웠던 for 반복문과 결합하면 단 5줄의 코드로 50개의 시트를 순식간에 쪼개서 만들 수 있습니다. 엑셀 화면을 띄울 필요도 없이, 엔터 키 한 번이면 수십 개의 탭이 예쁘게 정리된 마스터 파일이 완성됩니다. 오늘 배운 ExcelWriter를 통해 퇴근 시간을 1시간 더 앞당겨 보시기 바랍니다.

▶ 핵심 요약

  • 단순한 to_excel() 함수는 기존 파일을 덮어쓰기 때문에 여러 개의 시트를 저장할 수 없다.

  • pd.ExcelWriter를 사용해 가상의 엑셀 바인더를 열어두면, 하나의 파일에 sheet_name을 지정하여 여러 시트를 차곡차곡 추가할 수 있다.

  • 시트를 추가한 후에는 반드시 writer.close()를 실행해야 파일이 최종적으로 저장된다.

  • 엑셀 저장 시 A열에 불필요한 번호표가 생기는 것을 막으려면 index=False 옵션을 반드시 추가해야 한다.


지금까지는 아주 반듯하고 예쁜 표만 다루었습니다. 하지만 현실의 엑셀 파일은 맨 위에 쓸데없는 결재란이 있거나, 중간에 빈 줄이 섞여 있는 경우가 많죠. 다음 12편에서는 '불필요한 윗줄과 빈 줄을 건너뛰고 알맹이 데이터만 쏙 빼오는 실전 불러오기 기술'에 대해 다루겠습니다.

여러분은 엑셀 파일 하나에 시트(Sheet)를 최대 몇 개까지 쪼개서 만들어 보셨나요? 시트가 너무 많아서 로딩이 엄청나게 오래 걸렸던 경험이 있다면 댓글로 공유해 주세요!

댓글

이 블로그의 인기 게시물

엑셀 셀 병합 데이터, 파이썬으로 불러올 때 엉망으로 깨지는 현상 완벽 해결법

날짜와 시간 데이터 포맷이 제각각일 때 파이썬으로 일괄 통일하는 비법

수식이 걸린 엑셀 데이터, 파이썬으로 불렀더니 NaN이 뜨는 이유와 해결법