본문 바로가기
카테고리 없음

수백 개의 엑셀 파일을 한 번에 병합하는 파이썬 스크립트

by jbparkbill 2025. 10. 29.
반응형

수백 개의 엑셀 파일을 한 번에 병합하는 파이썬 스크립트
수백 개의 엑셀 파일을 한 번에 병합하는 파이썬 스크립트

IT·디지털 자동화 블로그 · 파이썬 엑셀 업무 효율화

수백 개의 엑셀 파일을 한 번에 병합하는 파이썬 스크립트

 

이 글은 여러 개의 엑셀 파일을 한 번에 읽어 하나의 통합 파일로 병합하는 파이썬 자동화 예제입니다. pandas와 openpyxl을 활용해 데이터 정리, 시트 생성, 중복 제거, 파일 저장까지 단계별로 완성할 수 있습니다.

왜 엑셀 병합 자동화인가

매일 또는 매주 각 부서·지점에서 제출되는 수십, 수백 개의 엑셀 파일을 수동으로 복사·붙여넣기 하는 일은 시간 낭비의 대표적인 예입니다. 파이썬을 사용하면 단 몇 줄의 코드로 모든 파일을 자동으로 읽고 병합할 수 있습니다. 특히 pandas 라이브러리는 시트별 데이터 처리와 정렬, 중복 제거까지 지원해 업무 속도를 획기적으로 높여줍니다.

환경 준비

가상환경을 설정하고 필요한 패키지를 설치합니다.

pip install pandas openpyxl

모든 파일은 같은 폴더에 모아두고 확장자는 `.xlsx` 형태로 통일하는 것이 좋습니다.

폴더 구조 준비하기

예를 들어 다음과 같은 폴더 구조를 가정합니다:

📂 excel_merge_project/
 ├── merge_script.py
 ├── 📂 data/
 │    ├── sales_1.xlsx
 │    ├── sales_2.xlsx
 │    ├── sales_3.xlsx
 │    └── ...

파이썬 병합 스크립트

pandas의 read_excel()concat() 함수를 이용해 모든 파일을 자동으로 병합합니다.

# file: merge_script.py
import pandas as pd
import os

# 1. 데이터 폴더 지정
folder_path = "data"
files = [f for f in os.listdir(folder_path) if f.endswith(".xlsx")]

all_data = []

# 2. 각 파일을 순차적으로 읽어 리스트에 저장
for f in files:
    path = os.path.join(folder_path, f)
    df = pd.read_excel(path)
    df["source_file"] = f  # 출처 파일명 기록
    all_data.append(df)

# 3. 데이터 병합
merged = pd.concat(all_data, ignore_index=True)

# 4. 결과 출력
print(f"{len(files)}개 파일 병합 완료")
print(merged.head())

이렇게 하면 모든 파일의 데이터를 하나의 DataFrame으로 통합할 수 있습니다.

중복 제거와 데이터 정리

같은 데이터가 여러 파일에 존재할 수 있으므로 중복을 제거해줍니다.

# 중복 행 제거
merged = merged.drop_duplicates()

# 결측치 제거
merged = merged.dropna(how="all")

# 날짜 순 정렬
if "날짜" in merged.columns:
    merged = merged.sort_values("날짜")

print("데이터 정리 완료")

결과 저장과 시트 분리

정리된 데이터를 새 파일에 저장하고, 필요 시 조건에 따라 시트를 나눌 수도 있습니다.

# file: save_results.py
output_path = "통합결과.xlsx"

with pd.ExcelWriter(output_path, engine="openpyxl") as writer:
    merged.to_excel(writer, index=False, sheet_name="전체데이터")

    # 특정 컬럼 기준 시트 분리
    if "지역" in merged.columns:
        for region, group in merged.groupby("지역"):
            group.to_excel(writer, index=False, sheet_name=str(region))

print(f"결과 저장 완료 → {output_path}")

이 코드는 "전체데이터" 시트 외에도 지역별로 자동 분리된 시트를 추가 생성합니다.

자주 묻는 질문

파일 개수가 많을 때 느려지는 이유는?

read_excel()은 I/O 속도에 영향을 받습니다. SSD를 사용하고, 필요 없는 컬럼을 지정(usecols)하면 속도를 개선할 수 있습니다.

파일 확장자가 xls일 때는?

pandas의 read_excel()이 xls도 지원하지만, 파일 수가 많다면 미리 xlsx로 일괄 변환하는 것이 안전합니다.

CSV 파일도 병합할 수 있나요?

네. pd.read_csv()로 읽고 동일한 방식으로 pd.concat()을 사용하면 됩니다.

다음 글 예고: 자동 병합 후 보고서 요약 및 시각화

다음 편에서는 병합된 데이터를 자동으로 요약하고, matplotlib으로 월별 실적 차트를 생성하는 방법을 다룹니다.

다음 글 보러 가기

관련 읽을거리: openpyxl 완벽 정리 · 엑셀 시트 자동 생성하기

참고: Python 공식 문서, pandas와 openpyxl 라이브러리 문서. 본 예제는 사내 데이터 취합 자동화, 매출 통합, 리포트 생성 등에 활용할 수 있습니다.

반응형