Pandas 데이터 분석 — 수만 건의 회계자료를 한눈에
9단계의 openpyxl이 엑셀 서식을 꾸미는 도구였다면, Pandas는 거대한 데이터를 그룹핑하고 필터링하는 분석용 무기입니다.
데이터가 아무리 많아도 단 몇 줄의 코드로 회계 통계를 뽑아낼 수 있습니다.
Pandas의 핵심: DataFrame
Pandas는 표(테이블) 형태의 데이터를 처리하는 파이썬 최고의 라이브러리입니다. 엑셀의 표 하나가 Pandas에서는 DataFrame(데이터프레임)이라는 이름으로 관리됩니다. 그리고 그 표 안의 열 하나를 Series(시리즈)라고 부릅니다.
pip install pandas| 거래처 | 금액 |
|---|---|
| ABC상사 | 5000000 |
| DEF기업 | 15000000 |
| index | 거래처 | 금액 (Series) |
|---|---|---|
| 0 | ABC상사 | 5000000 |
| 1 | DEF기업 | 15000000 |
엑셀과 CSV 파일을 단 한 줄로 읽기
openpyxl처럼 시트나 셀을 찾아서 반복문을 돌릴 필요가 없습니다. read_excel() 함수 하나면 거대한 파일도 즉시 DataFrame으로 변환됩니다.
import pandas as pd # 1. 엑셀 읽기 df_excel = pd.read_excel("sales.xlsx") # 2. CSV 읽기 (한글 안 깨지게 인코딩 지정) df_csv = pd.read_csv("sales.csv", encoding="utf-8-sig") print(df_excel)
데이터 파악하기 (헤드, 통계 요약)
10만 줄의 데이터를 프린트할 수는 없습니다. Pandas는 요약 정보를 보는 강력한 메서드를 지원합니다.
df.head() - 위에서 5줄만 보기print(df.head())
df.shape - 데이터 크기 (행, 열)print(df.shape) # 출력예: (10000, 8)
df.describe() - 숫자형 데이터 기초 통계 (합계, 평균, 최소최대)print(df.describe())
공급가액 count 10000.0 mean 15250000.0 min 1000000.0 max 85000000.0
조건 검색 — Pandas의 존재 이유
엑셀에서 마우스로 필터를 거는 작업을 한 줄의 코드로 수행합니다. 회계 이상 거래를 탐지할 때 핵심적으로 쓰입니다.
# 1. 단일 조건: 공급가액이 1,000만원 이상인 고액 거래만 추출 high_value = df[ df["공급가액"] >= 10000000 ] # 2. 다중 조건 (AND): '매출' 이면서(&) 1,000만원 이상 result_and = df[ (df["구분"] == "매출") & (df["공급가액"] >= 10000000) ] # 3. 다중 조건 (OR): 'ABC상사' 거나(|) 'DEF기업' 인 자료 result_or = df[ (df["거래처"] == "ABC상사") | (df["거래처"] == "DEF기업") ] # 4. 텍스트 검색: 이름에 "상사"가 들어간 거래처 모두 찾기 sangsa_df = df[ df["거래처"].str.contains("상사") ]
회계자료를 검증할 때 negative = df[df["공급가액"] < 0] 코드 하나면 수십만 건의 전표 중 마이너스 금액이 찍힌 이상 거래를 1초 만에 색출해 낼 수 있습니다.
엑셀 피벗테이블을 압도하는 groupby()
"거래처별로 총 매출을 집계해 줘", "월별 합계를 내줘" 같은 요구사항을 groupby 하나로 끝냅니다.
# 거래처별 합계만 보기 total_by_cust = df.groupby("거래처")["공급가액"].sum() # agg()를 쓰면 여러 통계를 한 번에 뽑아냅니다. summary = df.groupby("거래처")["공급가액"].agg(["count", "sum", "mean", "max"]) print(summary)
거래처 count sum mean max ABC상사 10 50000000 5000000 10000000 DEF기업 20 120000000 6000000 20000000
문자열 형태인 거래일자("2026-08-01")를 파이썬 날짜 형식으로 변환(`pd.to_datetime`)한 뒤, 연-월("2026-08")만 추출하면 월별 매출 집계를 쉽게 할 수 있습니다.
df["월"] = df["거래일자"].dt.to_period("M")
데이터 정제 (결측값, 중복)
실무 데이터는 엑셀 빈 칸(NaN, 결측값)과 중복 입력이 넘쳐납니다. 이를 정제하는 과정이 필수입니다.
# 1. 빈 칸(NaN) 확인하기 print(df.isnull().sum()) # 어느 열에 빈 칸이 몇 개 있는지 출력 # 2. 비어있는 금액(NaN)을 0으로 채우기 df["공급가액"] = df["공급가액"].fillna(0) # 3. 중복 데이터(전표 중복 입력 의심건)만 찾아내기 duplicates = df[ df.duplicated() ] # df = df.drop_duplicates() 로 중복을 삭제할 수 있지만 회계에선 조심해야 함!
여러 시트로 나눠서 엑셀 저장하기
분석을 끝냈다면, 결과를 다시 엑셀로 내보냅니다. 여러 개의 DataFrame을 하나의 엑셀 파일 내 각각 다른 시트에 저장할 수 있습니다.
# pd.ExcelWriter 를 사용하여 파일 하나를 엽니다. with pd.ExcelWriter("accounting_report.xlsx") as writer: # 인덱스(0,1,2..) 번호는 빼고 저장 (index=False) df.to_excel(writer, sheet_name="전체자료", index=False) sales.to_excel(writer, sheet_name="매출만", index=False) monthly.to_excel(writer, sheet_name="월별요약", index=False)
10단계 실습 — 회계 종합 리포트 생성기
원본 transactions.xlsx를 읽어들여 부가세를 계산하고, 매출/매입을 분류하고, 거래처별/월별 집계를 낸 뒤 5개의 시트를 가진 완벽한 보고서로 구워내는 실무형 파이프라인입니다.
import pandas as pd # 1. 파일 읽기 및 날짜 처리 df = pd.read_excel("transactions.xlsx") df["거래일자"] = pd.to_datetime(df["거래일자"]) # 2. 계산 열 추가 df["부가세"] = df["공급가액"] * 0.1 df["합계"] = df["공급가액"] + df["부가세"] # 3. 데이터 분리 sales = df[ df["구분"] == "매출" ].copy() purchases = df[ df["구분"] == "매입" ].copy() # 4. 집계표 생성 cust_summary = df.groupby("거래처")["공급가액"].sum().reset_index() df["월"] = df["거래일자"].dt.to_period("M").astype(str) monthly_summary = df.groupby("월")["공급가액"].sum().reset_index() # 5. 다중 시트 저장 with pd.ExcelWriter("accounting_report.xlsx") as writer: df.to_excel(writer, sheet_name="전체자료", index=False) sales.to_excel(writer, sheet_name="매출자료", index=False) purchases.to_excel(writer, sheet_name="매입자료", index=False) cust_summary.to_excel(writer, sheet_name="거래처별", index=False) monthly_summary.to_excel(writer, sheet_name="월별집계", index=False) print("🚀 5개의 시트가 포함된 종합 보고서가 생성되었습니다!")
사람이 엑셀을 열고 필터를 걸고 피벗테이블을 돌렸다면 최소 1시간이 걸렸을 작업을 이 스크립트는 단 1초 만에 끝냅니다.
1~10단계 총정리 및 다음 11단계 방향
회계사를 위한 파이썬 자동화 기본 커리큘럼 10단계가 모두 마무리되었습니다.
11단계부터는 Pandas를 이용해 더욱 실전적인 시나리오를 풉니다.
예를 들어 거래처별로 제각각 흩어져 있는 50개의 엑셀 파일(1월~12월 자료)을 폴더에서 한 번에 싹 읽어들여 하나의 거대한 통합 장부(DataFrame)로 합치는 프로젝트를 다루게 됩니다. 여기서부터 파이썬의 진정한 힘을 체감할 수 있습니다.