본문 바로가기
Python 기본기

Pandas로 데이터 정리 - 빠른 업무 자동화

by 두뇌향상중 2025. 9. 9.
반응형

 

 

Pandas로 데이터 정리하기 – 엑셀보다 빠른 파이썬 데이터 처리

엑셀에서 하던 정렬·필터·집계를 Pandas로 더 빠르고 재현 가능하게 처리합니다.

결측치/형 변환/그룹 집계까지 실무 흐름대로 예제를 제공합니다.

왜 Pandas를 써야 할까요?

  • 반복 작업을 코드로 자동화 가능합니다.
  • 대용량 데이터 처리 속도 빠릅니다.
  • 버전관리·리뷰·재현성 확보 쉽습니다.

설치 & 기본 세팅

pip install pandas pyarrow  # CSV/Parquet 다루기 권장
import pandas as pd
pd.__version__

노트: pyarrow 설치하면 Parquet 입출력 속도와 호환성이 좋아집니다.

샘플 데이터 가정

CSV 예시(파일명: sales.csv) 가정하면:

date,region,product,qty,price
2025-08-01,Seoul,Widget,10,12000
2025-08-01,Busan,Widget,7,12000
2025-08-01,Seoul,Gadget,5,18000
2025-08-02,Seoul,Widget,,12000
2025-08-02,Busan,Gadget,9,NaN

불러오기 & 빠른 훑어보기

import pandas as pd

df = pd.read_csv("sales.csv")              # 기본
# df = pd.read_csv("sales.csv", parse_dates=["date"])  # 날짜 파싱 옵션
print(df.head(3))
print(df.info())

엑셀 대비 장점

  • 수십/수백만 행도 처리 가능합니다.
  • 한 번 정한 로직 재사용이 가능합니다.

자주 쓰는 탐색

df.shape
df.describe(numeric_only=True)
df["region"].value_counts()

선택: loc vs iloc 요약

구분 loc iloc
 기준  라벨 기반  정수 위치 기반
 예시  df.loc[0:5, "qty"]  df.iloc[0:6, 3]
 불린 필터  지원함  일반적으론 불린 인덱싱은 loc와 함께 사용
# 서울 지역만 / 수량 5 이상
subset = df.loc[(df["region"]=="Seoul") & (df["qty"]>=5), ["date","product","qty"]]

정리 ① 결측치 처리

# 결측치 현황
df.isna().sum()

# 수량 결측치 0으로, 가격 결측치는 평균으로 대체
df["qty"]   = df["qty"].fillna(0)
df["price"] = df["price"].fillna(df["price"].mean())

정리 ② 형 변환 & 파생 컬럼

# 숫자형 보장
df["qty"]   = pd.to_numeric(df["qty"], errors="coerce").fillna(0).astype(int)
df["price"] = pd.to_numeric(df["price"], errors="coerce")

# 총액 컬럼 추가
df["amount"] = df["qty"] * df["price"]

정리 ③ 필터·정렬·중복 제거

# 위조/이상치 의심: 수량 0인 행 제외(상황 따라 유지 가능)
clean = df[df["qty"] > 0].copy()

# 금액 높은 순 정렬
clean = clean.sort_values(by="amount", ascending=False)

# 중복 제거 예시(날짜+지역+상품 동일 행 하나만)
clean = clean.drop_duplicates(subset=["date","region","product"])

그룹 집계

# 지역별/상품별 요약
agg = (clean
       .groupby(["region","product"], as_index=False)
       .agg(qty_sum=("qty","sum"),
            amount_sum=("amount","sum"),
            avg_price=("price","mean")))
print(agg)
집계 결과는 엑셀 피벗 느낌으로 이해하면 되며,
코드로 재현이 가능하니 보고서 자동화에 유리합니다.

내보내기(보고서 저장)

# CSV
agg.to_csv("summary.csv", index=False)

# Parquet (용량/속도 효율 좋음)
agg.to_parquet("summary.parquet", index=False)

엑셀 vs Pandas 비교(요약)

항목 엑셀 Pandas
반복작업 수동/매크로 코드로 자동화 쉬움
대용량 느림/제약 상대적으로 유리
재현성 파일 단위 노가다 같은 코드 재사용
협업 버전관리 어려움 Git로 표준화 쉬움

자주 만나는 오류와 해결

증상 원인 대응
한글 깨짐 인코딩 불일치 pd.read_csv(..., encoding="utf-8") 또는 cp949 시도
숫자인데 문자열로 읽힘 혼합 타입 pd.to_numeric(col, errors="coerce") 후 결측 대체
날짜 비교 안 됨 문자열 상태 pd.to_datetime(df["date"])로 변환

다음 글 예고 & 내부 링크

다음 편에서 Matplotlib로 시각화하고 자동 저장까지 다룰 예정입니다.

© 2025 공부하는 프로그래머 · 본문 예제는 교육용 샘플입니다.

반응형

댓글