엑셀 데이터 자동 분리! 파이썬으로 조건별 시트·파일 분리 저장하기

엑셀 데이터 자동 분리! 파이썬으로 조건별 시트·파일 분리 저장하기 (완성 코드 공개)

파이썬으로 엑셀 데이터를 조건별로 자동 분리해서 저장하는 모습


"전국 지점 데이터가 하나의 엑셀에 모여 있는데, 지점별로 파일을 따로 만들어서 각 지점 담당자에게 보내야 한다", "월별 매출 데이터를 월별 시트로 나눠서 정리하고 싶다"…

엑셀에서 필터를 걸고, 복사하고, 새 파일에 붙여넣고, 저장하는 작업을 분리할 항목 수만큼 반복하다 보면 한 시간이 훌쩍 지나갑니다. 파이썬을 한 번만 세팅해두면 특정 열 기준으로 데이터를 자동으로 분리해 시트별 또는 파일별로 저장하는 작업을 단 한 번의 실행으로 처리할 수 있습니다.


1단계: 준비물 설치

파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.

터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install pandas openpyxl

pandas는 엑셀 데이터를 읽고 그룹별로 분리하는 작업을 처리합니다. openpyxl은 .xlsx 파일을 읽고 쓰는 엔진입니다.

💡 이 코드로 할 수 있는 것: 특정 열(부서, 지역, 월, 담당자 등)을 기준으로 데이터를 자동 분리하고, 하나의 엑셀 파일 안에 시트별로 저장하거나, 항목별로 별도 엑셀 파일로 저장하는 두 가지 방식을 모두 지원합니다.

2단계: 엑셀 파일 준비

처리할 엑셀 파일은 아래처럼 1행이 헤더이고 2행부터 데이터가 입력된 형태이면 됩니다.

거래처명      지역    담당자   매출금액   납부상태
A주식회사    서울    홍길동   5,200,000  완납
B기술연구소  부산    김철수     980,000  미납
C물산        서울    이영희   3,100,000  완납
D상사        부산    박민준   7,400,000  미납
E무역        대전    최수진   1,250,000  완납

위 데이터를 "지역" 열 기준으로 분리하면 서울·부산·대전 3개 그룹으로 나뉩니다.


3단계: 완성 코드 — 시트별 분리 저장

아래 코드를 그대로 복사해서 메모장에 붙여넣고, split_to_sheets.py로 저장하세요.

import pandas as pd
from pathlib import Path

# ① 설정
INPUT_PATH   = r"C:\Users\내이름\Desktop\전국데이터.xlsx"       # ← 원본 엑셀 경로
OUTPUT_PATH  = r"C:\Users\내이름\Desktop\지역별_시트분리.xlsx"   # ← 저장 경로
SPLIT_COLUMN = "지역"   # ← 분리 기준 열 이름

# ② 데이터 읽기
df = pd.read_excel(INPUT_PATH, engine="openpyxl")
print(f"  ✔ 데이터 로드 완료: 전체 {len(df)}행")

groups = df[SPLIT_COLUMN].unique()
print(f"  ✔ 분리 그룹: {list(groups)}")

# ③ 시트별 저장
with pd.ExcelWriter(OUTPUT_PATH, engine="openpyxl") as writer:
    # 전체 데이터도 첫 시트에 저장
    df.to_excel(writer, sheet_name="전체", index=False)

    for group in sorted(groups):
        group_df   = df[df[SPLIT_COLUMN] == group].copy()
        sheet_name = str(group)[:31]   # 시트명 31자 제한
        group_df.to_excel(writer, sheet_name=sheet_name, index=False)
        print(f"  ✔ '{sheet_name}' 시트: {len(group_df)}행 저장")

print(f"\n✅ 완료! {len(groups)}개 시트 분리 저장 → {OUTPUT_PATH}")

4단계: 완성 코드 — 파일별 분리 저장

시트가 아니라 항목별로 별도 엑셀 파일로 저장하려면 아래 코드를 split_to_files.py로 저장하세요.

import pandas as pd
from pathlib import Path

# ① 설정
INPUT_PATH   = r"C:\Users\내이름\Desktop\전국데이터.xlsx"   # ← 원본 엑셀 경로
OUTPUT_DIR   = r"C:\Users\내이름\Desktop\지역별_파일분리"   # ← 저장 폴더 경로
SPLIT_COLUMN = "지역"   # ← 분리 기준 열 이름

# ② 출력 폴더 생성
output_dir = Path(OUTPUT_DIR)
output_dir.mkdir(exist_ok=True)

# ③ 데이터 읽기
df = pd.read_excel(INPUT_PATH, engine="openpyxl")
print(f"  ✔ 데이터 로드 완료: 전체 {len(df)}행")

groups = df[SPLIT_COLUMN].unique()
print(f"  ✔ 분리 그룹: {list(groups)}")

# ④ 그룹별 파일 저장
for group in sorted(groups):
    group_df  = df[df[SPLIT_COLUMN] == group].copy()
    safe_name = str(group).replace("/", "_").replace("\\", "_")
    out_path  = output_dir / f"{safe_name}_데이터.xlsx"
    group_df.to_excel(out_path, index=False)
    print(f"  ✔ {out_path.name}: {len(group_df)}행 저장")

print(f"\n✅ 완료! {len(groups)}개 파일 분리 저장 → {OUTPUT_DIR}")

5단계: 실행 방법

시트별 분리:

  1. 코드 ① 설정의 INPUT_PATH에 원본 파일 경로를, SPLIT_COLUMN에 분리 기준 열 이름을 입력합니다.
  2. 터미널에서 실행합니다:
python split_to_sheets.py

파일별 분리:

python split_to_files.py

파일별 분리 정상 실행 시 터미널에 이렇게 출력됩니다:

  ✔ 데이터 로드 완료: 전체 120행
  ✔ 분리 그룹: ['대전', '부산', '서울']
  ✔ 대전_데이터.xlsx: 18행 저장
  ✔ 부산_데이터.xlsx: 43행 저장
  ✔ 서울_데이터.xlsx: 59행 저장

✅ 완료! 3개 파일 분리 저장 → C:\Users\내이름\Desktop\지역별_파일분리

6단계: 자주 발생하는 오류와 해결법

오류 1: KeyError: '지역'

SPLIT_COLUMN에 입력한 열 이름이 엑셀 헤더와 다를 때 발생합니다. 엑셀 1행의 열 이름을 정확히 복사해서 붙여넣으세요. 공백이 한 칸이라도 다르면 오류가 납니다.

오류 2: 시트 이름이 너무 길어서 저장 실패

엑셀 시트명은 최대 31자까지 허용됩니다. 코드에 이미 [:31]로 자르는 처리가 포함되어 있습니다. 그럼에도 오류가 난다면 분리 기준 열의 값에 [ ] / \ ? * 같은 특수문자가 있는지 확인하세요.

오류 3: 그룹 수가 너무 많아 파일이 너무 많이 생성됨

분리 기준 열의 고유값이 수백 개인 경우 파일도 수백 개 생성됩니다. 먼저 df[SPLIT_COLUMN].value_counts()로 그룹 수를 확인한 뒤 분리 기준을 조정하세요.


응용: 분리된 파일을 담당자 이메일로 자동 발송하기

파일별로 분리 저장 후 각 담당자에게 해당 파일만 이메일로 자동 발송할 수 있습니다. 엑셀에 담당자 이메일 열을 추가하고 아래 코드를 파일 저장 직후에 추가하세요.

# 담당자 이메일 매핑 딕셔너리
EMAIL_MAP = {
    "서울": "seoul@example.com",
    "부산": "busan@example.com",
    "대전": "daejeon@example.com",
}

# 파일 저장 후 이메일 발송 (auto_email.py의 함수 활용)
from auto_email import send_email_with_attachment
email = EMAIL_MAP.get(str(group), "")
if email:
    send_email_with_attachment(email, str(group), str(out_path))
💡 이전 게시글과 결합하면: 이메일 자동 발송 편과 결합하면 지역별로 분리된 파일을 각 담당자에게 자동으로 발송할 수 있고, 엑셀 병합 편과 함께 쓰면 합치기·분리하기를 상황에 따라 자유롭게 활용할 수 있습니다.

핵심 요약

  • 준비물: Python + pandas + openpyxl 설치 (pip install pandas openpyxl)
  • 설정: INPUT_PATH, SPLIT_COLUMN(분리 기준 열), OUTPUT_PATH 또는 OUTPUT_DIR 수정
  • 시트 분리: 하나의 파일 안에 그룹별 시트로 저장 (split_to_sheets.py)
  • 파일 분리: 그룹별로 별도 엑셀 파일로 저장 (split_to_files.py)
  • 결과: 원본 파일 유지, 분리 그룹 자동 감지, 저장 행 수 출력

이 코드를 응용하면 두 개 열 조합(지역+월)으로 분리하거나, 분리된 파일에 서식을 자동 적용하는 것도 가능합니다.

이 블로그의 인기 게시물

느려진 구글 크롬 속도 2배 빨라지는 3가지 설정 방법 (2026년 최신 가이드)

카카오톡 용량 줄이기! 대화방 파일 삭제로 스마트폰 용량 확보법 (1분 해결)

업무 속도 3배 빨라지는 윈도우 기본 캡처 도구 단축키 및 200% 활용 꿀팁