PANDAS DATAFRAME NEDİR?

500 bin satırlık bir satış raporunu Excel'de açtınız, filtreyi tıkladınız ve ekran dakikalarca dondu. Bir sütunda basit bir hesap yapmak için formülü aşağı çekmeye çalıştığınızda program çöktü. Bu, analistlerin neredeyse her gün karşılaştığı bir sahne. Aynı veri pandas DataFrame'e yüklendiğinde, milyonlarca satır üzerinde aritmetik bir işlem saniyeler içinde tamamlanır. Fark, pandas'ın altta yatan vectorized operations mimarisinden gelir.
1. DataFrame Nedir, Neden Excel'den Farklıdır?
DataFrame, satır ve sütunlardan oluşan iki boyutlu, etiketli bir veri yapısıdır. Görünüşte bir Excel sayfasına benzer: başlıklar, indeksler, hücreler. Ancak içeride tamamen farklı çalışır. Excel her hücreyi tek tek formül motorundan geçirirken pandas, sütunları NumPy dizileri olarak bellekte tutar ve C düzeyinde toplu işlem yapar.
Bu farkın pratik sonucu şudur: Excel'de A1:A500000 hücresine =B1*C1 formülünü çektiğinizde 500 bin ayrı formül çalışır. Pandas'ta df["toplam"] = df["adet"] * df["fiyat"] yazdığınızda tek bir vektörel çarpım gerçekleşir. Süre farkı dakikalara karşı milisaniyelerdir.
2. Vectorized Operations Nasıl Çalışır?
Vectorized operations, döngü yazmadan bütün bir sütuna işlem uygulamaktır. Klasik Python döngüsü yerine pandas, NumPy'ın C uzantılarını kullanarak veriyi bellekte ardışık bloklar halinde işler. Bu sayede CPU önbelleği verimli kullanılır, yorumlayıcı yükü ortadan kalkar.
Tipik bir karşılaştırma yapalım. Bir milyon satırlık fiyat sütununa %18 KDV ekleyeceğiz. Üç yaklaşımın süre profili şöyledir:
- for döngüsü: ~3-5 saniye, satır başına Python yorumlayıcı çağrısı.
- apply() ile lambda: ~0.8-1.2 saniye, hâlâ satır satır ama optimize edilmiş.
- Vectorized (df["fiyat"] * 1.18): ~15-30 milisaniye, tek C çağrısı.
Aradaki uçurum, veri büyüdükçe genişler. 500 bin satırın üstünde Excel çöker, döngülü Python yavaşlar, vectorized pandas aynı hızda kalır.

3. DataFrame'in Temel Bileşenleri
Bir DataFrame üç ana parçadan oluşur: indeks (satır etiketleri), sütunlar (kolon etiketleri) ve değerler (gerçek veri matrisi). İndeks varsayılan olarak 0'dan başlayan tamsayıdır, ancak tarih, müşteri ID veya birden çok sütun (MultiIndex) olarak da tanımlanabilir.
- Series: DataFrame'in tek bir sütunu, kendi başına da bağımsız bir yapıdır.
- dtype: Her sütun belirli bir veri tipine sahiptir; int64, float64, object, datetime64, category gibi.
- Index: Satırlara hızlı erişim sağlayan etiketler kümesi, hash tablosu mantığıyla çalışır.
- Values: Altta yatan NumPy dizisi; doğrudan erişim için .values veya .to_numpy() kullanılır.
4. DataFrame Nasıl Oluşturulur?
En yaygın oluşturma yolları sözlük, liste, NumPy dizisi veya dış kaynaktan okumadır. CSV, Excel, Parquet, SQL, JSON ve hatta web sayfalarındaki tablolar tek satır kod ile DataFrame'e dönüşür. Örneğin pd.read_csv("satislar.csv") komutu, dosya boyutuna göre saniyeler içinde milyonlarca satırı belleğe alır.
Bellek bilinçli çalışmak için dtype parametresi kritiktir. Tekrarlayan metinleri category tipine çevirmek bellek kullanımını onda bire indirebilir. Tamsayıları int64 yerine int32 veya int16 olarak tanımlamak da büyük veri setlerinde fark yaratır. Parametrelerin tamamı ve okuma fonksiyonlarının ince ayarları için resmi dokümantasyonu incelemek faydalı olur.
5. Excel'den Pandas'a Geçişte Sık Yapılan Hatalar
Excel mantığıyla pandas kullanmak performans kazancını sıfırlar. Sık karşılaşılan tuzaklar şunlardır:
- iterrows() ile satır satır gezinmek; vectorized işlemden 100-1000 kat yavaştır.
- Her döngüde df'e satır eklemek; pandas her seferinde yeni bir blok ayırır, bellek patlar.
- Zincirleme atama yapmak (df[df["x"]>5]["y"] = 10); SettingWithCopyWarning üretir, çoğu zaman beklenen değişikliği yapmaz.
- apply() içinde Python lambda kullanmak; mümkün olduğunda yerine doğrudan sütun aritmetiği veya np.where tercih edilmelidir.
Bu kalıpları erken fark etmek, 50 satırlık kodun saatte değil saniyede çalışmasını sağlar. Pandas'ı en baştan vektörel düşünmeye alışarak öğrenmek için Python veri analizi eğitimi içeriğinden yararlanabilirsiniz.

6. Gerçek Hayatta DataFrame Senaryoları
DataFrame'in gerçek gücü, gruplama (groupby), birleştirme (merge), pivot ve zaman serisi işlemlerinde ortaya çıkar. Bir e-ticaret veri setinde müşteri başına toplam ciro, ay bazında ortalama sepet tutarı veya kategori kırılımında en çok satan ürünleri tek satırla çıkarabilirsiniz. Aynı işlemler Excel'de pivot tablo + manuel formüller gerektirirken pandas'ta tekrar edilebilir, sürümlenebilir Python kodu olur.
Bu da analizin tekrarlanabilirliğini değiştirir. Yarın veri güncellendiğinde aynı script bir komutla yeniden çalışır; manuel kopyala-yapıştır kalmaz, hata yüzeyi daralır. Pandas ekosistemine daha derin girmek için Python veri analizi eğitimi içeriğini inceleyebilirsiniz.
7. Ne Zaman DataFrame Kullanmamalı?
DataFrame her sorunun cevabı değildir. Tek seferlik 100 satırlık bir hesap için Excel hâlâ pratiktir. Verisi 10 GB'ı aşan, tek makinenin RAM'ini zorlayan senaryolarda ise pandas yetmez; Polars, Dask veya DuckDB gibi alternatifler gündeme gelir. Yine de orta ölçekli (birkaç yüz MB - birkaç GB) veri analizinde pandas DataFrame, esneklik, ekosistem ve öğrenme eğrisi dengesiyle hâlâ en yaygın seçimdir.
Özetle DataFrame; etiketli yapısı, vectorized işlem motoru ve zengin I/O desteğiyle Excel'in donduğu noktada başlayan bir araçtır. Doğru dtype seçimi, vektörel düşünme ve iterrows tuzaklarından kaçınma alışkanlığı edinildiğinde, milyonlarca satırlık bir analiz dizüstü bilgisayarda dakikalar içinde tamamlanabilir.
Sıkça Sorulan Sorular
Pandas DataFrame ile Excel arasındaki temel fark nedir?
Excel her hücreyi formül motorundan tek tek geçirir, pandas ise sütunları NumPy dizisi olarak bellekte tutup C düzeyinde toplu işlem yapar. Bu sayede 500 bin satırlık veride Excel saniyelerce donarken pandas aynı işlemi milisaniyelerde tamamlar. Ayrıca DataFrame işlemleri kod olarak tekrarlanabilir ve sürümlenebilir.
Vectorized operations tam olarak ne anlama gelir?
Vectorized operations, döngü yazmadan tüm sütuna veya satıra tek seferde işlem uygulamaktır. Pandas, alttaki NumPy'ın C uzantılarını kullanarak veriyi ardışık bellek bloklarında işler. Bu, Python yorumlayıcı yükünü ortadan kaldırır ve CPU önbelleğini verimli kullandığı için döngüye kıyasla 100-1000 kat hız kazandırır.
DataFrame oluşturmanın en yaygın yolları nelerdir?
En sık kullanılan yöntem dış dosyadan okumadır: pd.read_csv, pd.read_excel, pd.read_parquet veya pd.read_sql. Bunun yanı sıra Python sözlüğü, liste, NumPy dizisi veya başka bir Series'ten de DataFrame üretilebilir. Web sayfalarındaki HTML tablolar bile pd.read_html ile tek satırda DataFrame'e dönüştürülür.
iterrows() neden tavsiye edilmez?
iterrows(), DataFrame'i satır satır gezerek her satır için Python yorumlayıcısını çalıştırır. Bu, vectorized işleme göre 100-1000 kat yavaştır ve dtype garantisi de bozulabilir. Mümkün olduğunda sütun aritmetiği, np.where, df.apply veya groupby gibi vektörel alternatifler tercih edilmelidir.
Büyük veri setlerinde bellek kullanımı nasıl optimize edilir?
Tekrarlayan metin sütunlarını category tipine çevirmek bellek kullanımını çoğunlukla onda bire indirir. Tamsayıları int64 yerine int32 veya int16 olarak okumak da etkilidir. read_csv içinde dtype parametresi belirlemek, gereksiz sütunları usecols ile dışlamak ve chunksize ile parça parça işlemek diğer yaygın yöntemlerdir.
SettingWithCopyWarning uyarısı neden çıkar?
Bu uyarı, zincirleme indeksleme ile atama yaptığınızda ortaya çıkar; örneğin df[df['x']>5]['y'] = 10 gibi. Pandas burada bir kopya mı yoksa orijinal mi değiştirdiğinizden emin olamaz. Doğru kullanım, .loc ile tek adımda yazmaktır: df.loc[df['x']>5, 'y'] = 10. Bu hem güvenli hem de hızlıdır.
Pandas ne zaman yetmez, alternatifler nelerdir?
Veri RAM'inizi aşmaya başladığında, genellikle 10 GB ve üzerinde pandas zorlanır çünkü hepsini belleğe alır. Bu durumda Polars (çok daha hızlı Rust tabanlı motor), Dask (paralel ve out-of-core işlem) veya DuckDB (SQL motoru) gibi araçlar daha uygundur. Orta ölçekli veri için pandas hâlâ en pratik seçimdir.
DataFrame'de indeks neden önemlidir?
İndeks, satırlara hash tablosu hızında erişim sağlar ve birleştirme, hizalama, zaman serisi işlemlerinin temelini oluşturur. Tarih indeksi sayesinde resample, rolling gibi zaman tabanlı fonksiyonlar tek satırda çalışır. Doğru indeks seçimi, sorgu performansını ve kod okunabilirliğini büyük ölçüde iyileştirir.


