Pandas, on yılı aşkın süredir Python’da veri analizi için varsayılan kütüphane olmuştur. 2026’da hâlâ her yerde — ama artık bariz tercih değil. Yeni nesil kütüphaneler çarpıcı biçimde daha iyi performans, daha düşük bellek kullanımı ve daha sezgisel API’ler sunuyor.

Bu rehber ana seçenekleri karşılaştırıyor ve farklı kullanım senaryolarına hangisinin uygun olduğunu belirlemeye yardımcı oluyor.

Yarışmacılar

KütüphaneOlgunlukYazıldığı DilAna Avantaj
Pandas 2.2OlgunC/PythonEkosistem, aşinalık
Polars 1.xKararlıRustHız, bellek verimliliği
DuckDB 1.xKararlıC++SQL arayüzü, zero-copy
ModinKararlıPythonPandas yerine doğrudan geçiş
VaexBakımC++/PythonOut-of-core işleme
DataFusion (Python)BüyüyenRustApache Arrow native

Performans: Benchmark’lar ne gösteriyor

Sayı uydurmak yerine, resmi ve üçüncü taraf benchmark’ların gösterdiği sonuçlar:

Polars PDS-H Benchmark’ı (TPC-H türevi)

Polars ekibi, TPC-H karar destek benchmark’ından türetilmiş açık kaynaklı bir benchmark paketi olan PDS-H‘yi sürdürmektedir. En son sonuçlar (Mayıs 2025) Polars’ı Pandas ve diğer motorlarla standartlaştırılmış analitik sorgularda karşılaştırıyor.

Resmi benchmark’tan temel bulgular:

  • Polars, Pandas’ı tutarlı biçimde geride bırakıyor — 22 TPC-H türevi sorgunun tamamında belirgin farkla
  • Polars, eşdeğer işlemler için Pandas’tan önemli ölçüde daha az bellek kullanıyor
  • Benchmark GitHub’da açık kaynak olduğundan sonuçlar tekrarlanabilir

Enerji ve performans çalışması

Ayrı bir Polars enerji benchmark çalışması, Polars’ın büyük DataFrame’lerle yapılan sentetik veri analizi görevlerinde Pandas’a göre yaklaşık 8 kat daha az enerji tükettiğini ve büyük veri setlerinde TPC-H tarzı sorgularda Pandas’ın gerektirdiği enerjinin yaklaşık %63’ünü kullandığını bulmuştur.

Genel performans özellikleri

Yayınlanmış benchmark’lar ve topluluk raporlarına göre:

  • Polars ve DuckDB, çoğu analitik işlem için Pandas’tan önemli ölçüde daha hızlı, özellikle 1M satır üzerindeki veri setlerinde
  • DuckDB, toplama ve join ağırlıklı iş yüklerinde özellikle güçlü
  • Modin, Pandas’a göre mütevazı hızlanmalar sunuyor ancak daha yüksek bellek kullanımı pahasına
  • Arrow destekli dtype’lar ile Pandas 2.x, Pandas 1.x’ten belirgin şekilde daha hızlı

Not: Kesin performans oranları donanıma, veri şekline ve sorgu karmaşıklığına büyük ölçüde bağlıdır. Her zaman kendi iş yüklerinizde benchmark yapın.


Polars — Performans kritik çalışmalar için yeni standart

Performansın önemli olduğu yeni projeler için Polars, Pandas’a lider alternatif olarak öne çıkmıştır.

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’ın öne çıkma nedenleri:

  • Çoğu işlemde Pandas’tan önemli ölçüde daha hızlı — resmi PDS-H benchmark’larıyla doğrulanmıştır (kaynak)
  • Lazy evaluation, sorgu planını çalıştırmadan önce optimize eder. Başlangıçta .lazy() ve sonda .collect() yazmak mevcut en etkili performans optimizasyonudur
  • Tutarlı API — Pandas’ın birçok tuzağından kaçınır (SettingWithCopyWarning, tanıdık geldi mi?)
  • Rust tabanlı gerçek paralelizm — varsayılan olarak tüm mevcut çekirdekleri kullanır

Dürüst dezavantajları:

  • Ekosistem açığı: birçok kütüphane hâlâ Pandas DataFrame bekliyor. .to_pandas() ile dönüştürme bazen kaçınılmaz
  • Grafik entegrasyonu daha zayıf — Matplotlib/Seaborn, Pandas girişi bekler
  • API yeterince farklı olduğundan gerçek bir öğrenme eğrisi var. Pandas deneyimine sahip ekipler geçiş için yaklaşık bir hafta ayırmalı

DuckDB — SQL tercih edilen arayüz olduğunda

DuckDB bir DataFrame kütüphanesi değil — gömülü bir analitik veritabanı. Ancak Python’da veri analizi yapmanın en iyi yollarından biri haline geldi.

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’nin ikna edici yanları:

  • Mükemmel toplama performansı — groupby ve join işlemlerinde Polars ile rekabetçi veya daha hızlı
  • Zero-copy entegrasyon — Pandas, Polars ve Arrow ile. SQL sorguları, veri kopyalamadan Pandas DataFrame’lerine başvurabilir
  • Parquet, CSV, JSON’ı doğrudan okur — açık bir yükleme adımı gerekmez
  • Gömülü — sunucu yok, kurulum yok, sadece pip install duckdb

DuckDB’yi Polars yerine ne zaman seçmeli:

  • Ekip SQL ile method chaining’den daha rahat
  • Pipeline oluşturmadan dosyaları doğrudan sorgulamak
  • Farklı formatlardaki verileri birleştirmek (CSV + Parquet + JSON)

Polars ne zaman daha iyi bir seçim:

  • Karmaşık çok adımlı dönüşümler (method chaining genellikle iç içe SQL’den daha okunabilir)
  • Python kodunda veri pipeline’ları oluşturmak
  • Çalıştırma üzerinde ince ayar kontrolü gerektiğinde

Pandas 2.2 — Hâlâ geçerli (bazı çekincelerle)

Pandas ölmedi. 2.x’teki Arrow destekli dtype’lar ile Pandas 1.x’ten önemli ölçüde daha hızlı:

import pandas as pd

# Daha iyi performans için Arrow dtype'larını kullanın
df = pd.read_parquet("events.parquet", dtype_backend="pyarrow")

Pandas’ı hâlâ tercih edin:

  • Ekip zaten iyi biliyor ve performans yeterli
  • Maksimum kütüphane uyumluluğu gerekli (scikit-learn, statsmodels vb.)
  • Performans farklarının önemsiz olduğu küçük veri setleriyle (<1M satır) çalışılıyor
  • Jupyter notebook’larda keşifsel analiz yapılıyor

Alternatifleri değerlendirin:

  • Veri setleri mevcut RAM’i aşıyor
  • Performansın önemli olduğu üretim veri pipeline’ları oluşturuluyor
  • Düzenli olarak 10M satır üzerindeki veri setleriyle çalışılıyor

Modin — Zor bir tavsiye

Modin, tek bir import satırını değiştirerek Pandas’ı hızlandırmayı vaat ediyor. Pratikte ödünleşmeler önemli:

  • Pandas’ın kendisinden daha yüksek bellek kullanımı (veriyi süreçler arasında dağıtır)
  • Eksik API kapsamı — bazı işlemler sessizce Pandas’a geri düşer
  • Başlangıç yükü küçük veri setleri için daha yavaş yapar
  • Dağıtık yürütme sorunlarla karşılaştığında hata ayıklama karmaşıklığı artar

Değerlendirme: Çoğu ekip için ya Pandas’ta kalmak (uyumluluk için) ya da Polars’a geçmek (performans için) daha iyidir. Modin, her iki hedefi de tam olarak karşılamayan rahatsız bir orta noktada bulunuyor.


Karar çerçevesi

Veri < 1M satır mı?
  → Pandas (Arrow dtype'lar ile) yeterli. Fazla düşünmeyin.

Ekip SQL-öncelikli mi?
  → DuckDB.

Python veri pipeline'ı mı oluşturuluyor?
  → Polars.

Dosyaları yüklemeden sorgulamak mı gerekiyor?
  → DuckDB.

Veri > 100M satır, tek makine mi?
  → Polars (lazy mode) veya DuckDB.

Veri mevcut RAM'den büyük mü?
  → DuckDB veya Polars (streaming modu).

İleri okuma

Pandas’tan geçiş hakkında sorularınız mı var? [email protected] adresinden iletişime geçin.