학습 목표
오늘 우리는 사무실에서 흔히 마주치는 골치 아픈 문제를 단 1분 만에 해결하는 마법 같은 파이썬 자동화 기술을 배울 것입니다. 각기 다른 부서나 시스템에서 생성된 수많은 CSV 보고서들을 일일이 수작업으로 통합하느라 시간을 낭비하고 계신가요? 이제 그럴 필요 없습니다. 본 강의를 통해 여러분은 파이썬 pandas 라이브러리를 활용하여 여러 개의 CSV 파일을 하나의 완벽한 보고서로 통합하는 방법을 완벽하게 마스터하게 될 것입니다. 이 실무 기술은 여러분의 업무 효율을 극대화하고, 보고서 작성 시간을 획기적으로 단축시켜 줄 것입니다. 궁극적으로는 데이터 통합의 기본 원리를 이해하고, 실제 업무 환경에 즉시 적용할 수 있는 강력한 자동화 스킬을 습득하는 것이 우리의 목표입니다.
사전 준비 사항
본 실습을 원활하게 진행하기 위해 몇 가지 기초 환경 설정이 필요합니다. 아래 권장 사항을 따라 준비해 주십시오.
- 권장 통합 개발 환경 (IDE): Visual Studio Code (VSCode)
- 운영체제 (OS): Windows 10/11, macOS, 또는 Linux (어떤 운영체제든 관계없습니다.)
- 파이썬 (Python) 버전: Python 3.9 이상 (예: Python 3.10, 3.11, 3.12 권장)
- 필수 설치 라이브러리:
pandas,openpyxl(openpyxl은 통합된 데이터를 Excel 파일로 저장할 때 사용됩니다.)
터미널 또는 명령 프롬프트를 열고 다음 명령어를 입력하여 필요한 라이브러리를 설치합니다. 이미 설치되어 있다면 “Requirement already satisfied” 메시지가 나타날 것입니다.
pip install pandas openpyxl만약 Python 설치 경로 문제로 pip 명령어가 작동하지 않는다면, python -m pip install pandas openpyxl 또는 py -m pip install pandas openpyxl 을 시도해 보세요. 또한, 본 강의는 기본적인 파이썬 문법과 터미널 사용법에 대한 이해를 전제로 합니다.
단계별 실습 과정
1단계: 작업 환경 설정 및 샘플 CSV 파일 준비
가장 먼저, 실습을 위한 작업 디렉토리를 설정하고 통합할 샘플 CSV 파일들을 준비해야 합니다. 실제 업무에서는 다양한 경로에서 CSV 파일이 생성되겠지만, 실습에서는 특정 폴더에 모아두고 시작할 것입니다.
- 프로젝트 디렉토리 생성:
명령 프롬프트(Windows) 또는 터미널(macOS/Linux)을 열고, 다음 명령어를 입력하여
csv_integrator라는 이름의 프로젝트 폴더를 만들고 해당 폴더로 이동합니다.mkdir csv_integrator cd csv_integrator - 입력 CSV 파일 저장 폴더 생성:
통합할 CSV 파일들을 저장할
input_csvs라는 서브 디렉토리를 생성합니다.mkdir input_csvs - 샘플 CSV 파일 생성:
input_csvs폴더 안에 다음 내용으로sales_q1_2026.csv,sales_q2_2026.csv,sales_q3_2026.csv세 개의 파일을 생성합니다. 실제 데이터가 아니므로 간단하게 구성하지만, 실무에서는 수백, 수천 줄의 데이터가 들어갈 수 있습니다. 각 파일의 구조(컬럼명)는 동일하게 유지하는 것이 중요합니다.input_csvs/sales_q1_2026.csv내용:Date,Product,Revenue,Region 2026-01-05,Laptop,1200000,Seoul 2026-01-15,Mouse,25000,Busan 2026-02-01,Keyboard,75000,Seoul 2026-03-10,Monitor,300000,Daejeoninput_csvs/sales_q2_2026.csv내용:Date,Product,Revenue,Region 2026-04-03,Laptop,1500000,Busan 2026-04-20,Webcam,50000,Seoul 2026-05-12,Headset,120000,Daegu 2026-06-05,Printer,400000,Seoulinput_csvs/sales_q3_2026.csv내용:Date,Product,Revenue,Region 2026-07-01,SSD,180000,Gwangju 2026-07-25,RAM,90000,Busan 2026-08-15,GPU,800000,Seoul 2026-09-08,CPU,600000,IncheonVSCode에서 위 내용을 복사하여 각 파일을 생성할 수 있습니다. 파일 이름과 경로를 정확히 확인해 주세요.
2단계: Python 스크립트 작성 – 파일 목록 가져오기
이제 csv_integrator 폴더에 merge_csv.py라는 이름의 파이썬 스크립트 파일을 생성합니다. 이 스크립트가 우리의 핵심 자동화 도구가 될 것입니다. 먼저, 통합할 CSV 파일들의 목록을 가져오는 코드부터 작성해 보겠습니다.
파이썬의 glob 모듈은 특정 패턴을 가진 파일 경로를 검색하는 데 매우 유용합니다. 여기서는 input_csvs 폴더 내의 모든 .csv 파일을 찾을 것입니다.
import pandas as pd
import glob
import os
# 1. 통합할 CSV 파일들이 있는 디렉토리 경로 설정
input_dir = 'input_csvs'
output_dir = 'output_reports' # 결과를 저장할 디렉토리
# output_dir이 없으면 생성
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 2. 지정된 디렉토리에서 모든 CSV 파일 목록 가져오기
csv_files = glob.glob(os.path.join(input_dir, '*.csv'))
# 파일 목록 확인 (선택 사항)
print(f"발견된 CSV 파일: {csv_files}")
if not csv_files:
print("통합할 CSV 파일이 없습니다. 'input_csvs' 폴더에 CSV 파일을 넣어주세요.")
exit() # 파일이 없으면 스크립트 종료이 코드는 input_csvs 폴더에서 모든 .csv 확장자를 가진 파일을 찾아 csv_files 리스트에 저장합니다. os.path.join을 사용하면 운영체제에 관계없이 올바른 경로를 구성할 수 있습니다. 또한, 결과 파일을 저장할 output_reports 디렉토리가 없으면 자동으로 생성하도록 하여 편의성을 높였습니다.
3단계: Python 스크립트 작성 – CSV 파일 읽고 통합하기
이제 pandas 라이브러리를 사용하여 각 CSV 파일을 데이터프레임으로 읽어들이고, 이들을 하나로 통합하는 과정을 구현합니다. pandas는 데이터 처리 및 분석에 최적화된 강력한 도구입니다.
# ... (이전 코드에 이어서 작성) ...
# 3. 각 CSV 파일을 읽어 데이터프레임 리스트로 저장
df_list = []
for file in csv_files:
try:
df = pd.read_csv(file)
df_list.append(df)
print(f"'{file}' 파일 읽기 완료. 총 {len(df)} 행.")
except pd.errors.EmptyDataError:
print(f"경고: '{file}' 파일이 비어있습니다. 건너뜁니다.")
except FileNotFoundError:
print(f"오류: '{file}' 파일을 찾을 수 없습니다. 경로를 확인해주세요.")
except Exception as e:
print(f"'{file}' 파일 처리 중 오류 발생: {e}")
# 4. 모든 데이터프레임을 하나로 통합
if df_list:
merged_df = pd.concat(df_list, ignore_index=True)
print(f"\n모든 CSV 파일 통합 완료. 총 {len(merged_df)} 행.")
else:
print("통합할 유효한 데이터가 없습니다.")
exit()위 코드에서 pd.read_csv(file)는 각 CSV 파일을 읽어 DataFrame 객체로 변환합니다. 변환된 데이터프레임들은 df_list에 추가됩니다. 중요한 부분은 pd.concat(df_list, ignore_index=True)입니다. 이 함수는 리스트에 있는 모든 데이터프레임을 위아래로 이어 붙여 하나의 거대한 데이터프레임을 만듭니다. ignore_index=True는 통합 과정에서 원래의 인덱스를 무시하고 새로운 연속적인 인덱스를 부여하도록 합니다. 이로써 중복된 인덱스 문제가 발생하지 않습니다. 파일 읽기 중 발생할 수 있는 오류(빈 파일, 파일 없음 등)에 대한 기본적인 예외 처리도 포함했습니다.
4단계: 통합된 데이터 저장하기
이제 모든 데이터가 하나의 merged_df에 통합되었으니, 이 결과를 새로운 CSV 파일이나 Excel 파일로 저장해야 합니다. 실무에서는 Excel 파일이 더 유용하게 사용될 때가 많으므로, 두 가지 방법 모두를 보여드리겠습니다.
# ... (이전 코드에 이어서 작성) ...
# 5. 통합된 데이터를 새로운 CSV 파일로 저장
output_csv_path = os.path.join(output_dir, 'merged_sales_report_2026.csv')
merged_df.to_csv(output_csv_path, index=False, encoding='utf-8-sig')
print(f"통합된 CSV 파일이 '{output_csv_path}' 에 저장되었습니다.")
# 6. (선택 사항) 통합된 데이터를 새로운 Excel 파일로 저장
# openpyxl 라이브러리가 설치되어 있어야 합니다 (pip install openpyxl)
output_excel_path = os.path.join(output_dir, 'merged_sales_report_2026.xlsx')
merged_df.to_excel(output_excel_path, index=False, engine='openpyxl')
print(f"통합된 Excel 파일이 '{output_excel_path}' 에 저장되었습니다.")merged_df.to_csv() 함수는 데이터프레임을 CSV 파일로 저장합니다. index=False는 데이터프레임의 인덱스가 CSV 파일에 별도의 컬럼으로 저장되는 것을 방지합니다. encoding='utf-8-sig'는 한글 깨짐 현상을 방지하기 위해 Windows 환경에서 유용한 인코딩 방식입니다. merged_df.to_excel() 함수는 데이터를 Excel 파일로 저장하며, engine='openpyxl'을 명시하여 openpyxl 라이브러리를 사용하도록 합니다.
5단계: 전체 코드 통합 및 실행
이제 위에서 작성한 모든 코드를 merge_csv.py 파일에 통합하고, 스크립트를 실행해 봅시다. 이 스크립트 하나로 여러 CSV 파일을 단 1분 만에 통합할 수 있습니다.
csv_integrator/merge_csv.py 전체 코드:
import pandas as pd
import glob
import os
def merge_csv_reports(input_directory, output_directory, output_filename_csv='merged_report.csv', output_filename_excel='merged_report.xlsx'):
"""
지정된 디렉토리 내의 모든 CSV 파일을 읽어 통합하고, CSV 및 Excel 파일로 저장합니다.
Args:
input_directory (str): CSV 파일들이 있는 입력 디렉토리 경로.
output_directory (str): 통합된 보고서를 저장할 출력 디렉토리 경로.
output_filename_csv (str): CSV 파일로 저장할 때 사용할 파일 이름.
output_filename_excel (str): Excel 파일로 저장할 때 사용할 파일 이름.
"""
print(f"--- CSV 보고서 통합 시작 (2026년) ---")
# 출력 디렉토리 생성 (없으면)
if not os.path.exists(output_directory):
os.makedirs(output_directory)
print(f"출력 디렉토리 '{output_directory}' 생성 완료.")
# 입력 디렉토리 내의 모든 CSV 파일 경로 가져오기
csv_files = glob.glob(os.path.join(input_directory, '*.csv'))
if not csv_files:
print(f"경고: '{input_directory}' 디렉토리에서 통합할 CSV 파일을 찾을 수 없습니다.")
return
print(f"'{input_directory}' 에서 {len(csv_files)} 개의 CSV 파일을 발견했습니다:")
for f in csv_files:
print(f"- {os.path.basename(f)}")
# 각 CSV 파일을 읽어 데이터프레임 리스트로 저장
df_list = []
for file_path in csv_files:
try:
df = pd.read_csv(file_path)
df_list.append(df)
print(f" '{os.path.basename(file_path)}' 파일 ({len(df)} 행) 읽기 성공.")
except pd.errors.EmptyDataError:
print(f" 경고: '{os.path.basename(file_path)}' 파일이 비어있습니다. 건너뜜.")
except FileNotFoundError:
print(f" 오류: '{os.path.basename(file_path)}' 파일을 찾을 수 없습니다. (경로 확인 필요)")
except Exception as e:
print(f" 오류: '{os.path.basename(file_path)}' 파일 처리 중 예외 발생: {e}")
if not df_list:
print("유효한 데이터가 있는 CSV 파일을 찾지 못하여 통합을 중단합니다.")
return
# 모든 데이터프레임을 하나로 통합
try:
merged_df = pd.concat(df_list, ignore_index=True)
print(f"\n모든 CSV 파일 통합 완료. 총 {len(merged_df)} 행의 데이터가 통합되었습니다.")
except Exception as e:
print(f"데이터프레임 통합 중 오류 발생: {e}")
return
# 통합된 데이터를 CSV 파일로 저장
output_csv_path = os.path.join(output_directory, output_filename_csv)
try:
merged_df.to_csv(output_csv_path, index=False, encoding='utf-8-sig')
print(f"통합된 CSV 보고서가 '{output_csv_path}' 에 성공적으로 저장되었습니다.")
except Exception as e:
print(f"CSV 파일 저장 중 오류 발생: {e}")
# (선택 사항) 통합된 데이터를 Excel 파일로 저장
output_excel_path = os.path.join(output_directory, output_filename_excel)
try:
merged_df.to_excel(output_excel_path, index=False, engine='openpyxl')
print(f"통합된 Excel 보고서가 '{output_excel_path}' 에 성공적으로 저장되었습니다.")
except Exception as e:
print(f"Excel 파일 저장 중 오류 발생: {e}. 'openpyxl' 라이브러리가 설치되어 있는지 확인하세요.")
print(f"--- CSV 보고서 통합 완료 ---")
# 스크립트 실행 부분
if __name__ == "__main__":
INPUT_DIR = 'input_csvs'
OUTPUT_DIR = 'output_reports'
OUTPUT_CSV_NAME = 'merged_sales_report_2026.csv'
OUTPUT_EXCEL_NAME = 'merged_sales_report_2026.xlsx'
merge_csv_reports(INPUT_DIR, OUTPUT_DIR, OUTPUT_CSV_NAME, OUTPUT_EXCEL_NAME)
스크립트를 함수로 묶어 재사용성을 높였으며, if __name__ == "__main__": 블록을 사용하여 스크립트가 직접 실행될 때만 함수가 호출되도록 했습니다. 이제 터미널에서 csv_integrator 디렉토리로 이동한 후 다음 명령어를 실행합니다.
python merge_csv.py스크립트가 실행되면, 터미널에 파일 처리 과정과 결과 저장 경로가 출력될 것입니다. 이 과정은 파일의 개수와 크기에 따라 다르지만, 일반적인 사무실 보고서 기준으로는 단 몇 초에서 1분 이내에 완료될 것입니다.
결과 확인
스크립트 실행이 완료되면, csv_integrator 폴더 안에 새로 생성된 output_reports 디렉토리를 확인해 보세요. 그 안에 merged_sales_report_2026.csv 파일과 merged_sales_report_2026.xlsx 파일이 생성되어 있을 것입니다.
이 파일들을 열어보면, input_csvs 폴더에 있던 세 개의 개별 CSV 파일의 모든 데이터가 하나의 파일로 깔끔하게 통합되어 있는 것을 확인할 수 있습니다. 예를 들어, merged_sales_report_2026.csv 파일은 다음과 같은 내용을 포함하고 있을 것입니다:
Date,Product,Revenue,Region
2026-01-05,Laptop,1200000,Seoul
2026-01-15,Mouse,25000,Busan
2026-02-01,Keyboard,75000,Seoul
2026-03-10,Monitor,300000,Daejeon
2026-04-03,Laptop,1500000,Busan
2026-04-20,Webcam,50000,Seoul
2026-05-12,Headset,120000,Daegu
2026-06-05,Printer,400000,Seoul
2026-07-01,SSD,180000,Gwangju
2026-07-25,RAM,90000,Busan
2026-08-15,GPU,800000,Seoul
2026-09-08,CPU,600000,Incheon원본 파일의 모든 행이 올바르게 통합되었는지, 그리고 컬럼 헤더가 중복되지 않고 한 번만 나타나는지 확인해 보세요. 이처럼 파이썬 pandas 라이브러리를 사용하면 복잡하고 반복적인 CSV 통합 작업을 놀랍도록 빠르고 정확하게 처리할 수 있습니다. 이제 여러분은 이 강력한 자동화 기술을 여러분의 업무에 적용하여 시간을 절약하고 효율을 높일 수 있게 되었습니다. 데이터의 양이 늘어나거나, 통합해야 할 파일의 수가 수십, 수백 개로 늘어나더라도 이 스크립트는 여전히 단시간 내에 작업을 완료할 것입니다. 이 기본 스크립트를 바탕으로 다양한 조건(예: 특정 컬럼 기준으로 병합, 특정 조건에 맞는 행만 추출)을 추가하여 더욱 강력한 자동화 도구를 만들 수 있습니다.