Pandas는 10년 넘게 Python 데이터 분석의 표준이었다. 2026년 현재도 널리 쓰이고 있지만, 더 이상 당연한 선택은 아니다. 차세대 라이브러리들이 훨씬 뛰어난 성능, 낮은 메모리 사용량, 더 직관적인 API를 제공하고 있다.

이 글에서는 주요 선택지를 비교하고 유스케이스별로 적합한 라이브러리를 살펴본다.

주요 라이브러리

라이브러리성숙도구현 언어핵심 강점
Pandas 2.2성숙C/Python생태계, 보편성
Polars 1.x안정Rust속도, 메모리 효율
DuckDB 1.x안정C++SQL 인터페이스, 제로카피
Modin안정PythonPandas 드롭인 대체
Vaex유지보수 모드C++/Python아웃오브코어 처리
DataFusion (Python)성장 중RustApache Arrow 네이티브

성능: 벤치마크가 보여주는 것

조작된 수치가 아닌 공식 및 서드파티 벤치마크 결과를 정리했다.

Polars PDS-H 벤치마크 (TPC-H 파생)

Polars 팀은 TPC-H 의사결정 지원 벤치마크를 기반으로 한 오픈소스 벤치마크 스위트 PDS-H를 운영하고 있다. 최신 결과(2025년 5월)는 표준화된 분석 쿼리에서 Polars와 다른 엔진을 비교한다.

주요 결과:

  • Polars는 22개 TPC-H 파생 쿼리 전체에서 Pandas를 큰 차이로 앞선다
  • 동일 작업에서 Polars의 메모리 사용량이 Pandas보다 크게 적다
  • 벤치마크는 GitHub에서 오픈소스로 공개되어 있어 재현 가능

에너지 및 성능 연구

별도의 Polars 에너지 벤치마크 연구에 따르면, 대규모 DataFrame 합성 데이터 분석 작업에서 Polars의 에너지 소비는 Pandas의 약 8분의 1이며, 대용량 데이터셋의 TPC-H 스타일 쿼리에서는 Pandas 대비 약 63%의 에너지만 소비했다.

전반적인 성능 경향

공개 벤치마크와 커뮤니티 리포트 기반:

  • Polars와 DuckDB는 대부분의 분석 작업에서 Pandas보다 크게 빠르며, 특히 100만 행 이상의 데이터셋에서 그 차이가 두드러진다
  • DuckDB는 집계 및 조인이 많은 워크로드에서 특히 강하다
  • Modin은 Pandas 대비 소폭 개선되지만 메모리 사용량이 늘어난다
  • Pandas 2.x의 Arrow 기반 dtype은 1.x 대비 체감할 수 있을 만큼 빠르다

참고: 정확한 성능 비율은 하드웨어, 데이터 형태, 쿼리 복잡도에 크게 좌우된다. 반드시 실제 워크로드에서 벤치마크할 것.


Polars — 성능 중심 프로젝트의 새로운 기본

성능이 중요한 신규 프로젝트에서 Polars는 Pandas의 가장 유력한 대안으로 자리잡았다.

import polars as pl

df = pl.read_parquet("events.parquet")

result = (
    df.lazy()
    .filter(pl.col("event_type") == "purchase")
    .group_by("user_id")
    .agg([
        pl.col("amount").sum().alias("total_spent"),
        pl.col("amount").count().alias("num_purchases"),
    ])
    .sort("total_spent", descending=True)
    .head(100)
    .collect()
)

Polars가 돋보이는 이유:

  • 대부분의 연산에서 Pandas보다 훨씬 빠름 — PDS-H 공식 벤치마크로 확인 (출처)
  • 지연 평가로 실행 전 쿼리 플랜을 최적화. .lazy().collect()만 추가하면 가장 큰 성능 최적화를 얻을 수 있다
  • 일관된 API로 Pandas의 고질적 문제(SettingWithCopyWarning 등)를 회피
  • Rust 기반 네이티브 병렬 처리 — 기본적으로 모든 코어 활용

솔직한 단점:

  • 생태계 격차: 많은 라이브러리가 여전히 Pandas DataFrame을 요구한다. .to_pandas() 변환이 불가피한 경우가 있다
  • 시각화 연동이 약함 — Matplotlib/Seaborn은 Pandas 입력을 전제로 한다
  • API가 상당히 달라 실질적인 학습 비용이 있다. Pandas 숙련 팀도 전환에 약 1주일은 잡아야 한다

DuckDB — SQL을 선호할 때의 최적 선택

DuckDB는 DataFrame 라이브러리가 아니라 임베디드 분석 데이터베이스다. 하지만 Python에서 데이터를 분석하는 가장 좋은 방법 중 하나가 되었다.

import duckdb

result = duckdb.sql("""
    SELECT 
        user_id,
        SUM(amount) as total_spent,
        COUNT(*) as num_purchases
    FROM read_parquet('events.parquet')
    WHERE event_type = 'purchase'
    GROUP BY user_id
    ORDER BY total_spent DESC
    LIMIT 100
""").fetchdf()

DuckDB의 매력:

  • 뛰어난 집계 성능 — groupby·조인에서 Polars와 대등하거나 더 빠름
  • 제로카피 통합 — Pandas, Polars, Arrow 데이터를 복사 없이 SQL에서 직접 참조
  • Parquet, CSV, JSON 직접 읽기 — 별도 로딩 단계 불필요
  • 임베디드 — 서버 없이, 설정 없이 pip install duckdb만으로 사용 가능

Polars 대신 DuckDB를 고를 때:

  • 팀이 메서드 체이닝보다 SQL에 익숙할 때
  • 파이프라인 없이 파일을 직접 쿼리하고 싶을 때
  • 여러 포맷(CSV + Parquet + JSON)을 조인해야 할 때

DuckDB 대신 Polars가 나을 때:

  • 복잡한 다단계 변환 (메서드 체이닝이 중첩 SQL보다 읽기 쉬움)
  • Python 코드로 데이터 파이프라인을 구축할 때
  • 실행에 대한 세밀한 제어가 필요할 때

Pandas 2.2 — 아직 현역 (단, 조건부)

Pandas는 죽지 않았다. 2.x의 Arrow 기반 dtype 덕분에 1.x보다 상당히 빨라졌다:

import pandas as pd

# Arrow dtype으로 성능 향상
df = pd.read_parquet("events.parquet", dtype_backend="pyarrow")

Pandas를 계속 쓸 만한 경우:

  • 팀이 이미 잘 알고 있고 성능이 충분할 때
  • 라이브러리 호환성이 최우선일 때 (scikit-learn, statsmodels 등)
  • 소규모 데이터셋 (100만 행 미만)으로 성능 차이가 무시할 수 있을 때
  • Jupyter 노트북에서 탐색적 분석을 할 때

대안을 고려해야 할 경우:

  • 데이터셋이 가용 RAM을 초과할 때
  • 성능이 중요한 프로덕션 데이터 파이프라인 구축 시
  • 1,000만 행 이상의 데이터셋을 일상적으로 다룰 때

Modin — 추천하기 어려운 선택

Modin은 import 한 줄만 바꾸면 Pandas가 빨라진다고 약속한다. 현실에서는 트레이드오프가 크다:

  • Pandas 자체보다 메모리 사용량이 더 높음 (프로세스 간 데이터 분산 때문)
  • API 커버리지 불완전 — 일부 연산이 조용히 Pandas로 폴백
  • 시작 오버헤드 때문에 소규모 데이터셋에서는 오히려 느림
  • 분산 실행에서 문제 발생 시 디버깅 복잡도 증가

평가: 대부분의 팀에게는 호환성이 필요하면 Pandas를 유지하고, 성능이 필요하면 Polars로 전환하는 것이 낫다. Modin은 두 목표 어느 쪽도 충분히 달성하지 못하는 애매한 위치에 있다.


선택 프레임워크

데이터가 100만 행 미만?
  → Pandas (Arrow dtype 사용)로 충분. 고민하지 말 것.

팀이 SQL 중심?
  → DuckDB.

Python 데이터 파이프라인 구축?
  → Polars.

파일을 로드하지 않고 바로 쿼리?
  → DuckDB.

단일 머신에서 1억 행 이상?
  → Polars (lazy 모드) 또는 DuckDB.

데이터가 가용 RAM보다 클 때?
  → DuckDB 또는 Polars (스트리밍 모드).

참고 자료

Pandas에서의 마이그레이션에 대해 궁금한 점이 있다면 [email protected]으로 문의 바랍니다.