Pandas - [9단계] 판다스 성능 최적화

c.haha.e·2025년 8월 12일

STUDY

목록 보기
11/27

판다스 성능 최적화/실전 팁


1. pandas 옵션 설정: pd.set_option

  • 판다스의 출력, 표시, 계산 환경 등 다양한 옵션을 사용자 정의하는 함수
  • 표 전체/소수점/행수/컬럼수/너비 등 가독성, 디버깅, 리포트 자동화에 매우 유용!

● 예시

import pandas as pd

pd.set_option('display.max_rows', 100)      # 최대 100행 출력
pd.set_option('display.max_columns', 50)    # 최대 50컬럼 출력
pd.set_option('display.float_format', '{:.2f}'.format)  # 소수점 2자리로
pd.set_option('display.max_colwidth', 200)  # 컬럼 가로 폭

● 언제 쓰면 좋은가?

  • 대용량/긴 데이터 출력, 리포트 자동화, 디버깅/가독성 개선

2. 대용량 데이터 처리 시 메모리 절약법

  • 수백MB~수GB급 데이터도 “가볍게 다루기” 위한 판다스 실전 테크닉
  • 불필요한 object→category 변환, float64→float32 등 다운캐스팅, 필요 컬럼만 로딩, chunk 분할 등

● 예시

# 필요 컬럼만 읽기
df = pd.read_csv('data.csv', usecols=['A', 'B', 'C'])

# 타입 최적화 (정수형, 카테고리형)
df['코드'] = df['코드'].astype('category')
df['숫자'] = pd.to_numeric(df['숫자'], downcast='integer')

# chunk(덩어리)로 분할 처리
for chunk in pd.read_csv('data.csv', chunksize=100000):
    process(chunk)   # 각 chunk마다 처리

● 실무 TIP

  • 수억행 데이터도 chunk로 나누면 램 부족 걱정 줄어듦
  • 분석 대상 컬럼만 로딩, 필요 없는 컬럼은 drop()

3. Categorical 데이터 타입

  • *반복값이 많은 object 컬럼(예: 성별, 지역, 등급 등)**을 category 타입으로 바꾸면 메모리 사용량·집계 속도 대폭 개선
  • 분석/머신러닝/대용량 데이터에서 반드시 써야 하는 최적화법

● 예시

df['지역'] = df['지역'].astype('category')
  • 메모리 사용량, groupby/merge 속도 개선

4. MultiIndex 활용, 복잡한 데이터 재구조화

  • 2개 이상 인덱스(계층형 인덱스)로 데이터를 그룹화/집계/슬라이싱/피벗 등 고급 구조화
  • 엑셀 피벗테이블, 월별·지역별 매출 등 “다차원 데이터” 분석에 필수

● 예시

df = df.set_index(['연도', '지역'])   # 두 컬럼을 인덱스로!
# 연도별-지역별 매출 슬라이싱/집계가 자유로워짐
  • groupby().sum(), unstack(), stack(), pivot_table() 등과 자주 연계

5. 벡터연산 (Apply 대신 Vectorized)

  • for문, apply 대신 “한 줄 연산(벡터연산)”최고의 속도/성능 향상 (C로 구현된 내부 연산 덕분)
  • 가능하면 연산, 조건, 수식, 파생 모두 “Series 전체”로 처리!

● 예시

df['합계'] = df['A'] + df['B']      # apply 안 쓰고 바로!
df['합격'] = df['점수'] >= 60
df['정제'] = df['문자열'].str.replace('a','b')
  • np.where, np.select, .str., .dt., 등 모두 벡터화

6. 실무 사례: 여러 데이터 소스(엑셀/CSV/API 등) 통합

  • 여러 파일/시트/포맷(엑셀, CSV, json, API 등)을 한 번에 불러와서 합치기
  • 실무 데이터 분석, 리포트, 통계자료 구축 시 거의 필수!

● 예시: 여러 CSV 합치기

import glob
import pandas as pd

files = glob.glob('data/2024*.csv')
df_list = [pd.read_csv(f) for f in files]
df_total = pd.concat(df_list, ignore_index=True)

● 예시: 엑셀 여러 시트 합치기

xls = pd.ExcelFile('all_data.xlsx')
df = pd.concat([xls.parse(sheet) for sheet in xls.sheet_names])

● 예시: API + 엑셀 + CSV 병합

df1 = pd.read_csv('a.csv')
df2 = pd.read_excel('b.xlsx')
import requests
data = requests.get('api_url').json()
df3 = pd.DataFrame(data)

df_all = pd.concat([df1, df2, df3], ignore_index=True)

● 실무 TIP

  • 서로 포맷이 달라도 컬럼명/구조만 맞추면 pd.concat, merge로 쉽게 통합!
  • 통합 전 데이터 정제/컬럼명 일치 필수

정리

항목개념/기능 설명실전 활용 상황/장점
set_option출력, 환경 등 옵션 제어대용량 데이터, 가독성, 리포트 자동화
메모리 절약법타입 다운캐스트, chunk, 필요 컬럼만 로딩 등대용량/메모리 부족/속도 향상
Categorical반복값 많은 object → 카테고리groupby/merge/메모리/속도 개선
MultiIndex계층형(다중) 인덱스, 구조화/집계/슬라이싱복잡한 데이터 구조/엑셀 피벗 분석 등
벡터연산apply/for 대신 “한 번에 연산”속도/성능/코드 품질 모두 개선
여러 데이터 통합다양한 소스(엑셀/CSV/API 등) 한 번에 합치기실무 대량 데이터 집계/통계/리포트
profile
기록용 블로그

0개의 댓글