Phase 2 · 데이터 분석 끝판왕

Pandas 데이터 분석 — 수만 건의 회계자료를 한눈에

9단계의 openpyxl이 엑셀 서식을 꾸미는 도구였다면, Pandas는 거대한 데이터를 그룹핑하고 필터링하는 분석용 무기입니다.
데이터가 아무리 많아도 단 몇 줄의 코드로 회계 통계를 뽑아낼 수 있습니다.

예상 학습 시간 : 180분
난이도 : ★★★★★
사전 단계 : 엑셀 기초 (openpyxl)
다음 단계 : 여러 엑셀 파일 병합
01

Pandas의 핵심: DataFrame

Pandas는 표(테이블) 형태의 데이터를 처리하는 파이썬 최고의 라이브러리입니다. 엑셀의 표 하나가 Pandas에서는 DataFrame(데이터프레임)이라는 이름으로 관리됩니다. 그리고 그 표 안의 열 하나를 Series(시리즈)라고 부릅니다.

💻 터미널 명령어
pip install pandas
Excel의 표
거래처금액
ABC상사5000000
DEF기업15000000
Pandas의 DataFrame
index거래처금액 (Series)
0ABC상사5000000
1DEF기업15000000
02

엑셀과 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)
03

데이터 파악하기 (헤드, 통계 요약)

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
04

조건 검색 — 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초 만에 색출해 낼 수 있습니다.

05

엑셀 피벗테이블을 압도하는 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")

06

데이터 정제 (결측값, 중복)

실무 데이터는 엑셀 빈 칸(NaN, 결측값)과 중복 입력이 넘쳐납니다. 이를 정제하는 과정이 필수입니다.

# 1. 빈 칸(NaN) 확인하기
print(df.isnull().sum()) # 어느 열에 빈 칸이 몇 개 있는지 출력

# 2. 비어있는 금액(NaN)을 0으로 채우기
df["공급가액"] = df["공급가액"].fillna(0)

# 3. 중복 데이터(전표 중복 입력 의심건)만 찾아내기
duplicates = df[ df.duplicated() ]
# df = df.drop_duplicates() 로 중복을 삭제할 수 있지만 회계에선 조심해야 함!
07

여러 시트로 나눠서 엑셀 저장하기

분석을 끝냈다면, 결과를 다시 엑셀로 내보냅니다. 여러 개의 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)
08

10단계 실습 — 회계 종합 리포트 생성기

원본 transactions.xlsx를 읽어들여 부가세를 계산하고, 매출/매입을 분류하고, 거래처별/월별 집계를 낸 뒤 5개의 시트를 가진 완벽한 보고서로 구워내는 실무형 파이프라인입니다.

🚀
궁극의 실무 스크립트
클릭 한 번에 뽑아내는 5-Sheet 보고서
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초 만에 끝냅니다.

09

1~10단계 총정리 및 다음 11단계 방향

회계사를 위한 파이썬 자동화 기본 커리큘럼 10단계가 모두 마무리되었습니다.

1~4단계: 문법 기초 (변수, 반복문)
5~8단계: 구조와 설계 (함수, 모듈, 예외방어)
9~10단계: 실무 자동화 (엑셀 조작 및 Pandas 분석)
다음 11단계 — 여러 엑셀 파일 병합 및 데이터 정제

11단계부터는 Pandas를 이용해 더욱 실전적인 시나리오를 풉니다.
예를 들어 거래처별로 제각각 흩어져 있는 50개의 엑셀 파일(1월~12월 자료)을 폴더에서 한 번에 싹 읽어들여 하나의 거대한 통합 장부(DataFrame)로 합치는 프로젝트를 다루게 됩니다. 여기서부터 파이썬의 진정한 힘을 체감할 수 있습니다.

Step 09 : 엑셀 자동화 기초 커리큘럼 목록으로