파이썬 엑셀 합치기: 40대 직장인이 야근 끝낸 현실적인 판다스 코드

매달 말일만 되면 수십 개씩 쏟아지는 현장 보고서를 하나로 묶는 파이썬 엑셀 합치기 코드를 직접 짜보기 전까지, 제 퇴근 시간은 늘 엑셀의 자비에 달려 있었습니다.

저녁 7시가 넘어가면 사무실 공기는 유독 무거워집니다. 현장 소장님들과 거래처에서 카카오톡과 메일로 보내온 엑셀 파일은 대략 30~40개. 파일 하나를 더블클릭해서 열고, 제목 줄 빼고 알맹이 데이터만 마우스로 쭉 긁어서 Ctrl + C, 취합용 종합 대장 창으로 넘어가서 맨 아랫줄을 찾은 뒤 Ctrl + V.

이 단순무식한 작업을 서른 번쯤 반복하다 보면 손목 안쪽이 찌릿하게 저려오고, 모니터를 보는 눈은 뻑뻑해집니다. 그러다 서른다섯 번째 파일쯤에서 엑셀 창이 하얗게 변하며 ‘응답 없음’이라는 모래시계가 빙글빙글 돌 때의 그 서늘한 기분은, 야근을 밥 먹듯 해본 직장인이라면 누구나 공감하실 겁니다.

“도대체 내가 왜 2020년대에 이런 1990년대식 노가다를 손으로 하고 있어야 하지?” 그날 밤 식어버린 믹스커피를 들이켜며 결심했습니다. 코딩의 ‘코’ 자도 모르는 40대 비전공자지만, 내 저녁 시간과 관절을 지키기 위해서라도 이 엑셀 지옥은 반드시 끝내야겠다고 말입니다.

인터넷 강의와 실무의 거대한 괴리

파이썬 엑셀 합치기 작업 전 폴더에 모아둔 현장 파일 목록
대체 텍스트: 파이썬 엑셀 합치기 작업 전 폴더에 모아둔 현장 파일 목록

처음엔 유튜브나 블로그를 뒤적이며 남들이 올려둔 코드를 그대로 따라 해봤습니다. 강사들은 아주 여유로운 목소리로 “판다스의 concat 함수를 쓰면 파일 10개가 1초 만에 합쳐집니다, 참 쉽죠?”라고 말합니다.

그런데 그 코드를 내 컴퓨터에 가져와 돌려보면 열에 아홉은 시뻘건 에러 글씨가 터져 나옵니다. 왜 그럴까요?

강사님들이 영상에서 쓰는 엑셀 파일은 첫 줄부터 끝 줄까지 오타 하나 없이 반듯하게 정돈된 ‘온실 속 화초’ 같은 예제 파일입니다. 하지만 우리가 현업에서 실제로 받는 엑셀 파일은 어떤가요?

누구는 파일명을 10월_동탄현장.xlsx로 보내고, 누구는 최종_수원지점(수정).xls로 보냅니다. 어떤 파일은 1행부터 데이터가 시작하는데, 어떤 파일은 위에 결재란과 빈 줄이 세 칸이나 들어가 있습니다. 실무 엑셀은 그야말로 야생의 정글입니다. 이 정글 같은 파일들을 무작정 합치려니 코드가 터지는 게 당연했습니다.

제가 수많은 시행착오 끝에 깨달은 핵심은 두 가지였습니다. 첫째, 폴더 안에 흩어져 있는 파일들을 파이썬이 스스로 빗자루질하듯 쓸어 담게 만들 것(glob 모듈). 둘째, 파일마다 제각각인 제목 줄 위치를 통일해서 깔끔하게 이어 붙여 파이썬 엑셀 합치기를 안정적으로 끝낼 것(pandas.concat)

40대 실무자가 정착한 현실적인 파이썬 엑셀 합치기 코드

아래 코드는 제가 지금도 매달 말일마다 바탕화면에서 실제로 돌리고 있는 검증된 파이썬 스크립트입니다. 군더더기 없이 딱 필요한 핵심만 담았습니다.

Python

import glob
import pandas as pd

# 1. 흩어져 있는 엑셀 파일들이 모인 폴더 경로 지정
# (바탕화면의 '취합폴더' 안에 모아둔 모든 xlsx 파일을 한 번에 찾습니다)
folder_path = r"C:\Users\Admin\Desktop\취합폴더\*.xlsx"
file_list = glob.glob(folder_path)

print(f"찾아낸 파일 개수: 총 {len(file_list)}개입니다. 취합을 시작합니다.")

# 2. 파일들을 하나씩 열어서 담아둘 빈 바구니 생성
all_data = []

for file in file_list:
    # 엑셀 파일의 실제 데이터가 3번째 줄부터 시작한다면 skiprows=2 같은 옵션을 줄 수 있습니다
    df = pd.read_excel(file)

    # 각 데이터가 어느 파일에서 온 것인지 표시해두면 나중에 검토할 때 아주 편합니다
    df["출처파일"] = file.split("\\")[-1]

    all_data.append(df)

# 3. 바구니에 담긴 데이터들을 위아래로 한 방에 이어 붙이기
merged_df = pd.concat(all_data, ignore_index=True)

# 4. 바탕화면에 완성된 종합 대장 저장
output_path = r"C:\Users\Admin\Desktop\월말_최종_통합대장.xlsx"
merged_df.to_excel(output_path, index=False)

print("작업이 끝났습니다. 바탕화면을 확인해 보세요!")
대체 텍스트: 파이썬 엑셀 합치기 코드로 완성된 최종 엑셀 대장 결과 화면

이 코드를 처음 성공시켰던 날의 전율을 아직도 잊지 못합니다.

이렇게 파이썬 엑셀 합치기 코드를 실행하자, 한 시간 동안 눈이 빠져라 복사해서 붙여넣던 파일 32개가… 까만 창에서 엔터 한 번 치자마자 딱 2.4초 만에 하나의 거대한 엑셀 파일로 합쳐져 바탕화면에 툭 떨어졌습니다. 열어보니 누락된 행도 없고, 서식이 깨지지도 않았습니다. 그 허탈하면서도 짜릿한 기분이란 이루 말할 수 없었습니다.

실무에서 에러를 피하는 사소하지만 중요한 팁

혹시 파이썬 엑셀 합치기 작업을 하다가 에러가 난다면, 대부분 아래 두 가지 문제 중 하나입니다.

  1. 옛날 엑셀 확장자(.xls) 문제: 거래처 중에는 아직도 구형 엑셀을 쓰시는 분들이 있습니다. *.xlsx로 검색하면 구형 파일이 빠지게 되므로, 취합 전에 해당 파일만 열어서 ‘다른 이름으로 저장’을 통해 최신 .xlsx로 바꿔두시는 것이 가장 속 편합니다.
  2. 열(컬럼) 이름의 띄어쓰기 오타: 어떤 파일은 ‘고객명’, 어떤 파일은 ‘고 객 명’으로 띄어쓰기가 들어가 있으면 파이썬은 이를 서로 다른 항목으로 인식해 옆으로 열을 넓혀버립니다. 이럴 때는 판다스로 합치기 전에 엑셀 양식의 헤더(첫 줄)를 사전에 통일해 주는 간단한 규칙을 팀원들에게 공유하는 것이 좋습니다.

더 깊이 있는 데이터 병합 옵션이나 고급 문법이 궁금하신 분들은 판다스 공식 병합 가이드 문서를 틈틈이 읽어보시는 것을 추천합니다.

글을 맺으며: 비전공자가 코딩을 배우는 진짜 이유

솔직히 말씀드리면, 40대가 넘어서 파이썬을 배운다는 건 결코 쉬운 일이 아닙니다. 뒤돌아서면 문법을 까먹고, 영어로 된 에러 메시지를 보면 눈앞이 아득해집니다. 우리가 IT 스타트업 개발자로 전직할 것도 아닌데 왜 이런 고생을 사서 해야 할까요?

이유는 단순합니다. 내 시간을 지키기 위해서입니다.

기계가 2초 만에 끝낼 수 있는 단순 반복 작업에 내 청춘과 저녁 시간을 갈아 넣지 않기 위해서입니다. 손가락 노가다를 멈춰야, 현장의 안전을 점검하고 팀원들의 목소리를 듣는 ‘진짜 사람다운 일’에 집중할 수 있습니다.

이번에 완성한 엑셀 취합본을 특정 조건별로 나누거나 이메일로 쏘아 보내는 방법이 궁금하시다면, 제가 앞서 연재했던 파이썬 엑셀 자동화 시리즈(40대 비전공자 직장인의 파이썬 독학기 9편) 글들도 함께 읽어보시며 여러분만의 든든한 업무 파이프라인을 구축해 보시기 바랍니다.

오늘도 엑셀 창과 씨름하며 야근과 싸우고 계신 모든 직장인 여러분의 정시 퇴근을 진심으로 응원합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다