학습 목표
이번 시간에는 여러분의 반복적인 엑셀 작업에 혁신을 가져올 파이썬 자동화 스크립트 제작 과정을 완벽하게 마스터할 것입니다. 수많은 엑셀 파일을 일일이 열어 복사하고 붙여넣는 지루하고 실수하기 쉬운 작업은 이제 그만! 파이썬과 강력한 데이터 처리 라이브러리인 Pandas를 활용하여 여러 개의 엑셀 파일을 단 하나의 통합 파일로 효율적으로 합치는 방법을 배우게 됩니다.
이 강의를 통해 다음과 같은 목표를 달성할 수 있습니다:
- 파이썬 환경 설정 및 필수 라이브러리 설치 능력 강화: Pandas 및 엑셀 파일 처리에 필요한 라이브러리들을 정확하게 설치하고 관리하는 방법을 익힙니다.
- Pandas를 이용한 엑셀 파일 처리 자동화 스킬 습득: 여러 엑셀 파일을 읽고, 데이터를 통합하며, 새로운 엑셀 파일로 저장하는 전 과정을 파이썬 코드로 구현할 수 있게 됩니다.
- 실무 효율성 극대화: 데이터 취합 및 분석에 필요한 시간을 획기적으로 단축하여, 더 중요한 업무에 집중할 수 있는 역량을 갖춥니다.
- 문제 해결 능력 향상: 파일 경로 처리, 오류 예외 처리 등 실제 자동화 스크립트 개발 시 발생할 수 있는 문제에 대한 기본적인 대응 능력을 키웁니다.
이 강의가 끝나면 여러분은 더 이상 수동 엑셀 작업에 시간을 낭비하지 않는 진정한 ‘스마트 워커’가 될 것입니다.
사전 준비 사항
본격적인 실습에 앞서, 원활한 학습과 실습 진행을 위한 기본적인 개발 환경을 설정해야 합니다. 아래 내용을 참고하여 준비해 주세요.
1. 권장 개발 환경
- 통합 개발 환경 (IDE): Visual Studio Code (VS Code)를 강력히 권장합니다. 가볍고 확장성이 뛰어나며, 파이썬 개발에 최적화된 기능을 제공합니다.
- 운영체제 (OS): Windows 10/11, macOS (Ventura 이상), 또는 Linux (Ubuntu 22.04 LTS 이상) 등 현재 널리 사용되는 모든 운영체제에서 실습이 가능합니다.
2. 파이썬 버전
- 파이썬 3.8 이상: 현재 2026년 기준으로, 파이썬 3.8 버전 이상을 설치하는 것을 권장합니다. 최신 버전일수록 성능 개선 및 보안 강화가 이루어져 있습니다. 파이썬 공식 웹사이트(python.org)에서 최신 버전을 다운로드하여 설치할 수 있습니다. 설치 시 ‘Add Python to PATH’ 옵션을 반드시 체크하여 환경 변수에 추가해 주세요.
3. 필수 라이브러리 설치
이번 실습에 필요한 핵심 라이브러리인 pandas와 엑셀 파일 처리를 위한 openpyxl을 설치해야 합니다. 터미널 또는 명령 프롬프트를 열고 다음 명령어를 실행합니다.
pip install pandas openpyxl
pandas: 파이썬에서 데이터를 효율적으로 다루기 위한 필수 라이브러리입니다. 특히 표 형태의 데이터를 처리하는 데 강력한 기능을 제공합니다.openpyxl:.xlsx형식의 엑셀 파일을 읽고 쓰는 데 사용되는 라이브러리입니다. Pandas가 엑셀 파일을 처리할 때 내부적으로 이 라이브러리를 활용합니다.
설치가 완료되었다면, 이제 실습을 위한 모든 준비가 끝났습니다.
단계별 실습 과정
이제 본격적으로 파이썬 스크립트를 작성하여 여러 엑셀 파일을 합쳐봅시다. 각 단계를 차근차근 따라오시면 됩니다.
1. 프로젝트 폴더 구조 설정
먼저, 작업의 효율성과 관리를 위해 깔끔한 폴더 구조를 만듭니다. VS Code를 열고 새로운 폴더를 생성합니다.
# 터미널에서 다음 명령어를 실행하여 폴더 생성 (또는 수동으로 생성)
mkdir excel_merger
cd excel_merger
mkdir data
mkdir merged
최종 폴더 구조는 다음과 같아야 합니다:
excel_merger/
├── data/
├── merged/
└── merge_excel.py (이 파일은 나중에 만들 것입니다)
data 폴더에는 합칠 원본 엑셀 파일들을 넣을 것이고, merged 폴더에는 합쳐진 최종 엑셀 파일이 저장될 것입니다.
2. 샘플 엑셀 파일 준비
data 폴더 안에 합칠 엑셀 파일들을 직접 만들어야 합니다. 예시로 두 개의 엑셀 파일을 만들어 보겠습니다. 파일 이름은 sales_q1_2026.xlsx, sales_q2_2026.xlsx로 하겠습니다. 각 파일은 동일한 열(헤더) 구조를 가지고 있어야 합니다. 예를 들어, 다음과 같은 데이터를 포함합니다.
sales_q1_2026.xlsx 예시:
| 날짜 | 제품명 | 판매량 | 매출액 |
|---|---|---|---|
| 2026-01-15 | 노트북 A | 10 | 1000000 |
| 2026-02-20 | 스마트폰 B | 25 | 2500000 |
sales_q2_2026.xlsx 예시:
| 날짜 | 제품명 | 판매량 | 매출액 |
|---|---|---|---|
| 2026-04-10 | 태블릿 C | 15 | 1500000 |
| 2026-05-05 | 노트북 A | 8 | 800000 |
이처럼, data 폴더 안에 여러 개의 엑셀 파일을 넣어주세요. 파일 개수는 제한이 없습니다.
3. 파이썬 스크립트 작성 준비
excel_merger 폴더 바로 아래에 merge_excel.py라는 이름으로 새 파이썬 파일을 생성합니다. 이제 이 파일에 코드를 작성할 것입니다.
4. 필요한 라이브러리 임포트
merge_excel.py 파일의 가장 위에 다음 코드를 추가하여 필요한 라이브러리들을 불러옵니다.
import pandas as pd
import os
pandas는 데이터프레임(DataFrame)이라는 강력한 데이터 구조를 제공하여 표 형태의 데이터를 쉽게 다룰 수 있게 해줍니다.pd라는 별칭으로 사용할 것입니다.os모듈은 운영체제와 상호작용하는 기능을 제공합니다. 여기서는 파일 목록을 가져오거나 경로를 조작하는 데 사용합니다.
5. 엑셀 파일 목록 가져오기
data 폴더 안에 있는 모든 엑셀 파일의 경로를 가져와야 합니다. 이를 위해 os 모듈을 사용합니다. 현재 스크립트 파일이 있는 위치를 기준으로 data 폴더의 경로를 설정하고, 해당 폴더 안의 모든 파일 중 .xlsx 확장자를 가진 파일만 필터링합니다.
# 엑셀 파일들이 저장된 폴더 경로
input_folder = 'data'
# 합쳐진 파일이 저장될 폴더 경로
output_folder = 'merged'
# 합쳐진 엑셀 파일의 이름
output_filename = 'merged_sales_data.xlsx'
# output_folder가 없으면 생성
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# data 폴더 내의 모든 파일 목록 가져오기
file_list = os.listdir(input_folder)
# .xlsx 확장자를 가진 파일만 필터링
excel_files = [f for f in file_list if f.endswith('.xlsx')]
print(f"'{input_folder}' 폴더에서 발견된 엑셀 파일: {excel_files}")
os.listdir(input_folder)는 지정된 폴더 내의 모든 파일과 폴더 이름을 리스트로 반환합니다. 이 중에서 .xlsx로 끝나는 파일만 선택하여 excel_files 리스트에 저장합니다.
6. 각 엑셀 파일 읽어와서 데이터프레임으로 변환
이제 excel_files 리스트에 있는 각 엑셀 파일을 하나씩 읽어와 Pandas의 데이터프레임으로 변환해야 합니다. 그리고 이 데이터프레임들을 하나의 리스트에 모아둘 것입니다.
# 모든 엑셀 파일의 데이터를 담을 리스트
all_dataframes = []
# 각 엑셀 파일을 읽어서 데이터프레임으로 변환
for filename in excel_files:
file_path = os.path.join(input_folder, filename) # 파일의 전체 경로 생성
try:
df = pd.read_excel(file_path) # 엑셀 파일을 읽어 데이터프레임으로 변환
all_dataframes.append(df) # 리스트에 추가
print(f"'{filename}' 파일 읽기 성공.")
except Exception as e:
print(f"'{filename}' 파일 읽기 실패: {e}")
os.path.join(input_folder, filename)은 운영체제에 맞는 올바른 파일 경로를 생성해줍니다 (예: Windows에서는data\sales_q1_2026.xlsx, macOS/Linux에서는data/sales_q1_2026.xlsx).pd.read_excel(file_path)는 지정된 경로의 엑셀 파일을 읽어 Pandas 데이터프레임 객체로 반환합니다.try-except블록을 사용하여 파일 읽기 중 발생할 수 있는 오류를 처리합니다. 예를 들어, 엑셀 파일이 손상되었거나 형식이 올바르지 않을 경우 스크립트가 중단되지 않고 오류 메시지를 출력합니다.
7. 모든 데이터프레임 하나로 합치기
all_dataframes 리스트에 모든 엑셀 파일의 데이터프레임이 모여있습니다. 이제 이들을 Pandas의 concat 함수를 사용하여 하나의 거대한 데이터프레임으로 합칠 차례입니다.
# 모든 데이터프레임을 하나로 합치기
if all_dataframes: # 합칠 데이터프레임이 있는 경우에만 실행
merged_df = pd.concat(all_dataframes, ignore_index=True)
print("모든 엑셀 파일의 데이터가 성공적으로 합쳐졌습니다.")
else:
print("합칠 엑셀 파일이 발견되지 않았습니다. 스크립트를 종료합니다.")
# 이 시점에서 스크립트를 종료하거나, 함수인 경우 return을 사용합니다.
# 전체 스크립트에서는 함수 내에서 return을 사용합니다.
pd.concat(all_dataframes, ignore_index=True):all_dataframes는 합칠 데이터프레임들의 리스트입니다.ignore_index=True는 각 원본 데이터프레임의 인덱스를 무시하고 새로운 연속적인 인덱스를 생성하도록 지시합니다. 이 옵션을 사용하지 않으면 원본 인덱스가 그대로 유지되어 중복될 수 있습니다.
if all_dataframes:조건문은data폴더에 엑셀 파일이 전혀 없을 경우 오류가 발생하지 않도록 방지합니다.
8. 합쳐진 데이터 엑셀 파일로 저장
이제 최종적으로 합쳐진 merged_df를 새로운 엑셀 파일로 저장합니다. merged 폴더 안에 저장되도록 경로를 지정합니다.
# 합쳐진 데이터를 새로운 엑셀 파일로 저장
output_file_path = os.path.join(output_folder, output_filename)
try:
merged_df.to_excel(output_file_path, index=False)
print(f"데이터가 '{output_file_path}' 파일로 성공적으로 저장되었습니다.")
except Exception as e:
print(f"엑셀 파일 저장 실패: {e}")
merged_df.to_excel(output_file_path, index=False):output_file_path는 저장할 엑셀 파일의 전체 경로입니다.index=False는 Pandas가 데이터프레임의 인덱스를 엑셀 파일에 열로 저장하지 않도록 지시합니다. 일반적으로 데이터 자체만 필요하므로 이 옵션을True로 설정할 필요는 없습니다.
9. 전체 스크립트 코드
지금까지 작성한 모든 코드를 합치면 다음과 같은 완전한 스크립트가 됩니다. merge_excel.py 파일을 열고 아래 코드를 붙여넣으세요.
import pandas as pd
import os
def merge_excel_files(input_folder='data', output_folder='merged', output_filename='merged_output.xlsx'):
"""
지정된 폴더 내의 모든 엑셀(.xlsx) 파일을 읽어 하나의 엑셀 파일로 합쳐줍니다.
Args:
input_folder (str): 원본 엑셀 파일들이 있는 폴더 경로.
output_folder (str): 합쳐진 엑셀 파일이 저장될 폴더 경로.
output_filename (str): 합쳐진 엑셀 파일의 이름.
"""
print(f"--- 엑셀 파일 병합 자동화 스크립트 시작 ---")
print(f"원본 파일 폴더: '{input_folder}'")
print(f"저장될 파일 폴더: '{output_folder}'")
print(f"저장될 파일 이름: '{output_filename}'")
# output_folder가 없으면 생성
if not os.path.exists(output_folder):
os.makedirs(output_folder)
print(f"'{output_folder}' 폴더가 생성되었습니다.")
# data 폴더 내의 모든 파일 목록 가져오기
try:
file_list = os.listdir(input_folder)
except FileNotFoundError:
print(f"오류: '{input_folder}' 폴더를 찾을 수 없습니다. 폴더가 올바르게 생성되었는지 확인해주세요.")
return
# .xlsx 확장자를 가진 파일만 필터링
excel_files = [f for f in file_list if f.endswith('.xlsx')]
if not excel_files:
print(f"'{input_folder}' 폴더에서 합칠 엑셀 파일(.xlsx)이 발견되지 않았습니다. 스크립트를 종료합니다.")
return
print(f"'{input_folder}' 폴더에서 발견된 엑셀 파일 ({len(excel_files)}개): {excel_files}")
all_dataframes = []
# 각 엑셀 파일을 읽어서 데이터프레임으로 변환
for filename in excel_files:
file_path = os.path.join(input_folder, filename)
try:
df = pd.read_excel(file_path)
all_dataframes.append(df)
print(f" - '{filename}' 파일 읽기 성공.")
except Exception as e:
print(f" - 경고: '{filename}' 파일 읽기 실패. 이 파일은 건너뜁니다. 오류: {e}")
if not all_dataframes:
print("모든 엑셀 파일을 읽는 데 실패했거나, 유효한 데이터가 없습니다. 스크립트를 종료합니다.")
return
# 모든 데이터프레임을 하나로 합치기
print("모든 데이터프레임을 하나로 합치는 중...")
merged_df = pd.concat(all_dataframes, ignore_index=True)
print(f"총 {len(merged_df)}개의 행이 성공적으로 합쳐졌습니다.")
# 합쳐진 데이터를 새로운 엑셀 파일로 저장
output_file_path = os.path.join(output_folder, output_filename)
try:
merged_df.to_excel(output_file_path, index=False)
print(f"--- 데이터가 '{output_file_path}' 파일로 성공적으로 저장되었습니다. ---")
except Exception as e:
print(f"--- 오류: 엑셀 파일 저장 실패: {e} ---")
# 스크립트 실행 시 함수 호출
if __name__ == "__main__":
merge_excel_files()
저는 코드를 함수로 묶고 실행 시점에 호출하도록 변경하여 재사용성과 가독성을 높였습니다. if __name__ == "__main__": 블록은 스크립트가 직접 실행될 때만 merge_excel_files() 함수가 호출되도록 보장합니다.
결과 확인
이제 작성한 스크립트를 실행하여 결과를 확인해 볼 차례입니다. VS Code 터미널에서 다음 명령어를 입력하세요.
python merge_excel.py
스크립트가 성공적으로 실행되면, 터미널에 다음과 유사한 메시지가 출력될 것입니다.
--- 엑셀 파일 병합 자동화 스크립트 시작 ---
원본 파일 폴더: 'data'
저장될 파일 폴더: 'merged'
저장될 파일 이름: 'merged_output.xlsx'
'merged' 폴더가 생성되었습니다. (이미 존재하면 이 메시지는 나타나지 않습니다)
'data' 폴더에서 발견된 엑셀 파일 (2개): ['sales_q1_2026.xlsx', 'sales_q2_2026.xlsx']
- 'sales_q1_2026.xlsx' 파일 읽기 성공.
- 'sales_q2_2026.xlsx' 파일 읽기 성공.
모든 데이터프레임을 하나로 합치는 중...
총 4개의 행이 성공적으로 합쳐졌습니다.
--- 데이터가 'merged\merged_output.xlsx' 파일로 성공적으로 저장되었습니다. ---
스크립트 실행 후, excel_merger/merged 폴더를 확인해 보세요. merged_output.xlsx 파일이 생성되어 있을 것입니다. 이 파일을 열어보면, data 폴더에 있던 모든 엑셀 파일의 데이터가 하나의 시트에 합쳐져 있는 것을 확인할 수 있습니다. 인덱스가 새롭게 부여되었고, 원본 데이터의 내용이 그대로 유지되었는지 확인해 보세요.
만약 합쳐진 파일의 데이터가 예상과 다르거나 오류 메시지가 출력된다면, 다음 사항들을 점검해 보세요:
- 파일 경로:
data폴더 안에 엑셀 파일이 올바르게 위치해 있는지, 파일 이름에 오타는 없는지 확인합니다. - 엑셀 파일 형식: 모든 파일이
.xlsx형식인지 확인합니다. (.xls형식은xlrd라이브러리가 필요하며, Pandas가 자동으로 처리할 수 있지만, 일관성을 위해.xlsx를 권장합니다.) - 헤더(열 이름): 합칠 모든 엑셀 파일의 헤더(열 이름)가 정확히 동일한지 확인합니다. Pandas의
concat함수는 기본적으로 동일한 열 이름을 기준으로 데이터를 합칩니다. 만약 열 이름이 다르면 별도의 처리 (예:rename,reindex)가 필요할 수 있습니다. - 라이브러리 설치:
pandas와openpyxl이 제대로 설치되었는지 다시 한번pip install pandas openpyxl명령어로 확인합니다.
이 스크립트는 여러분의 일상적인 엑셀 작업에서 엄청난 시간을 절약해 줄 것입니다. 이제 이 코드를 기반으로 여러분의 필요에 맞게 더욱 발전시켜 보세요. 예를 들어, 특정 조건에 따라 파일을 필터링하거나, 합치기 전에 데이터를 전처리하는 기능을 추가할 수 있습니다. 자동화의 세계는 무궁무진합니다!