- Excel pivot tablosunun pandas karşılığı
- İlk pivot tablo: satır, sütun ve değer
- Genel toplam, boş hücre ve sıralama
- pivot, pivot_table ve crosstab: hangisi ne zaman?
- Sonucu düzleştirmek ve raporlamaya hazırlamak
- Adım adım örnek akış
- Sık yapılan hatalar
- Mindset programlarında bu beceri nerede çalışılır?
- Sık sorulan sorular
Pandas'ta pivot tablo: Excel mantığını kodla kurmak
Pandas pivot_table ile Excel tarzı özet tablo kurma: index, columns, values, aggfunc, margins, fill_value, pivot ve crosstab farkı ve örnekler.
Excel pivot tablosunun pandas karşılığı
Excel'de pivot tablo kurarken alanları satır, sütun ve değer kutularına sürüklersiniz. Pandas'ta aynı kavramlar parametre olarak yazılır: satır için index, sütun için columns, hesaplanan alan için values, işlem için aggfunc. Yani bir pivot tablonun tüm kurulumu tek bir çağrıya sığar ve her seferinde aynı sonucu verir.
Excel'den farkı tekrarlanabilirliktir: aylık raporu yeni veriyle yeniden üretmek, tabloyu yeniden kurmadan kodu çalıştırmakla bitiyor. Bu yüzden Excel'de pivot tablodan sık rapor çıkaran analistler için pandas'a geçiş doğal bir adımdır. Aşağıdaki örneklerde satis adlı tablonun bolge, product, kanal ve tutar sütunları olduğunu varsayın.
İlk pivot tablo: satır, sütun ve değer
En yalın çağrı:
import pandas as pd
pd.pivot_table(satis, index="bolge", columns="kanal", values="tutar", aggfunc="sum")
Burada her bölge bir satır, her satış kanalı bir sütun olur ve hücreler tutar toplamını gösterir. aggfunc verilmezse varsayılan ortalamadır; bu, Excel'in varsayılan toplamından farklıdır ve tutar tablolarında sessiz bir yanlışa yol açar. Her zaman aggfunc'u açıkça yazın.
index ve columns için liste verebilirsiniz: index=["bolge", "product"] satırda çok düzeyli bir hiyerarşi kurar. values için de birden çok sütun ya da aggfunc için fonksiyon listesi verilebilir; örneğin aggfunc=["sum", "mean"] her değer için toplam ve ortalamayı yan yana getirir. Bu durumda sütunlar çok düzeyli olur ve okumak zorlaşır; sade rapor için çağrıyı bölmek daha iyidir.
Genel toplam, boş hücre ve sıralama
Excel'deki genel toplam satır ve sütunu için margins=True kullanılır:
pd.pivot_table(satis, index="bolge", columns="kanal", values="tutar", aggfunc="sum", margins=True, margins_name="Toplam")
Pandas belgelerine göre margins, All adlı toplam satırı ve sütunu ekler ve aynı aggfunc ile hesaplar; margins_name ile bu etiketi Türkçeleştirebilirsiniz. Toplam satırı ortalama gibi toplanamayan bir işlevde, tüm verinin ortalamasını verir; bu satırların aritmetik ortalaması değildir, bunu bilin.
Bir bölge-kanal kombinasyonunda hiç satış yoksa hücre eksik (NaN) görünür. fill_value parametresine sıfır vererek bu hücreleri sıfırla doldurabilirsiniz; ancak sıfır ile “veri yok” farklı şeylerdir, yorumlarken dikkat edin. Satırları büyükten küçüğe sıralamak için çağrı sonrası sort_values kullanın; birden çok sütun varsa hangi sütuna göre sıralayacağınızı belirtin.
pivot, pivot_table ve crosstab: hangisi ne zaman?
Bu işlevler benzer görünür ama farklı işler yapar.
pivot yalnızca yeniden şekillendirir; toplulaştırma yapmaz. Belgelerin ifadesiyle pivot, index ve columns çiftlerinin benzersiz olduğu durumda çalışır; mükerrer varsa hata verir. Uzun biçimli (long) veriyi geniş biçime çevirmek için uygundur: her tarih ve değişken çiftinde tek değer olan bir tablo gibi.
pivot_table mükerrerleri aggfunc ile toplulaştırır; bu yüzden gerçek iş verisinde çoğunlukla pivot_table kullanılır.
crosstab birden çok faktörün çapraz tablosunu çıkarır ve varsayılan olarak frekans sayar. Girdiyi DataFrame sütun adları yerine ayrı Series ya da diziler olarak alır. pd.crosstab(satis["bolge"], satis["kanal"]) her bölge-kanal kombinasyonunda kaç kayıt olduğunu verir. normalize parametresi oranları gösterir. values ve aggfunc eklerseniz pivot_table benzeri bir toplulaştırma da yapabilir.
Kısa kural: sayım ve oran için crosstab, değer toplama için pivot_table, yalnızca şekil değiştirme için pivot.
Sonucu düzleştirmek ve raporlamaya hazırlamak
pivot_table sonucu, satır etiketleri indekste olan bir DataFrame döndürür. Başka bir araca ya da grafiğe aktaracaksanız reset_index ile satır etiketlerini sütuna çevirin. Sütunlar çok düzeyliyse, düzeyleri birleştiren bir adım gerekir:
tablo = pd.pivot_table(satis, index="bolge", columns="kanal", values="tutar", aggfunc="sum").reset_index() tablo.columns.name = None
Birden fazla aggfunc kullandıysanız sütun adları çok düzeyli bir MultiIndex olacaktır; bunları "_".join benzeri bir ifadeyle tek düzeye indirebilirsiniz. Sayıların gösterimi için round ve biçimlendirme (style.format) kullanılabilir; ancak hesaplamayı yuvarlanmış değerlerle yapmayın.
Tarih sütunuyla aylık pivot kuracaksanız pd.Grouper(key="tarih", freq="MS") ile index içinde gruplama yapabilirsiniz; tarih sütununun datetime türünde olması şarttır.
Adım adım örnek akış
Bir yönetici “hangi bölgede hangi kanal daha çok satıyor, toplamlar nasıl?” diye soruyor. Akış şöyle ilerler: • Veriyi okuyun ve satis.info() ile türleri ve eksik değerleri kontrol edin; tutar sütunu metinse sayıya çevirin. • Gerekirse bolge ve kanal sütunlarındaki boşluk ve yazım farklarını temizleyin; aksi halde aynı bölge birkaç satır olarak görünür. • pivot_table çağrısını kurun: index bolge, columns kanal, values tutar, aggfunc sum, margins True. • fill_value ile boş hücrelerin nasıl gösterileceğine karar verin. • Sonucu genel toplamla karşılaştırın: satis["tutar"].sum() ile pivottaki genel toplam eşit olmalıdır. • reset_index ile düzleştirip rapora ya da grafiğe aktarın.
Toplamların eşleşmemesi, temizlenmemiş kategoriler ya da eksik anahtar satırlarının işaretidir. Bu kontrol raporu yayımlamadan önceki son sağlamadır.
Sık yapılan hatalar
- aggfunc yazmamak: Varsayılan ortalama, tutar için yanlış sonuç verir.
- Kategorik sütunda observed ayarını atlamak: Gözlenmeyen kategori kombinasyonları satır olarak çıkabilir veya çıkmayabilir; varsayılan sürümler arasında değişebilir, açıkça yazın.
- fill_value sıfırı yorumlamamak: Sıfır ile veri yokluğu aynı değildir.
- pivot ile mükerrer veriyi birleştirmeye çalışmak: Hata alırsınız; pivot_table kullanın.
- Çok düzeyli sütunlarla çalışmak: Sade tablo için bir çağrıda tek aggfunc verin.
- Temizlenmemiş etiketlerle kurmak: “Ankara” ve “Ankara ” ayrı satırlar olur.
- Toplamı doğrulamamak: Pivot toplamı ile ham verinin toplamını karşılaştırmak yanlışı yakalar.
Mindset programlarında bu beceri nerede çalışılır?
Pivot analizi, tablo verisini özetlemenin en tanıdık biçimidir. Mindset'in Python ile Veri Analizi (Pandas) eğitimi Gruplama, Toplulaştırma ve Pivot Analizi modülünde pivot tabloyu işler; Veri Temizleme ve Ön İşleme Teknikleri modülü de pivot öncesi etiketleri hazırlama konusunu kapsar. Vaka Çalışmaları ve İş Analitiğinde Pandas modülü ise bu özetleri iş sorularına bağlar.
Excel Orta Düzey eğitiminin Pivot Tablo Ustalığı modülünü tamamlamış ve raporlarını kodla otomatik üretmek isteyen analistler, raporlama uzmanları ve iş analistleri için uygundur. Kurumsal ekipler tekrarlayan aylık pivot raporlarını bu yaklaşımla tek bir betikten üretebilir.
İlgili Mindset programı
Python ile Veri Analizi (Pandas)
Sık sorulan sorular
pivot_table ile Excel pivot tablosu aynı sonucu verir mi?
Aynı veriyle ve aynı toplulaştırmayla mantıksal olarak aynı sonucu verir. Farklar varsayılanlardadır: pandas'ta aggfunc varsayılanı ortalamadır, Excel'de sayısal alanlar için toplamdır. Genel toplam için margins=True yazmanız gerekir. Aynı parametrelerle sonuçlar eşleşmelidir.
Pivot tabloda eksik hücreleri nasıl doldururum?
fill_value parametresine bir değer verin; en yaygını sıfırdır. Hücrelerin boş olması, o kombinasyonda veri bulunmadığını gösterir. Sıfırla doldurmak raporu okunur kılar ama gerçek sıfır satışla veri yokluğunu birbirinden ayırt etmeyi zorlaştırır; yorumlarken bunu göz önünde tutun.
Pivot tablo sonucunu nasıl DataFrame gibi kullanırım?
Sonuç zaten bir DataFrame'dir, satır etiketleri indekste durur. reset_index çağırarak bunları sütuna çevirin. Çok düzeyli sütunlar varsa düzeyleri birleştirip tek düzeye indirin. Sonra tablo, grafik kütüphanelerine ya da dosyaya yazmaya hazır olur.
crosstab ile pivot_table arasında ne fark var?
crosstab varsayılan olarak frekans sayar ve girdiyi ayrı diziler olarak alır; pivot_table DataFrame ve sütun adlarıyla çalışır, varsayılan olarak ortalama alır. crosstab'a values ve aggfunc vererek pivot_table benzeri bir toplulaştırma yaptırabilirsiniz.
Birden fazla toplulaştırmayı aynı pivot tabloda gösterebilir miyim?
Evet, aggfunc'a işlev listesi verin; örneğin toplam ve ortalama birlikte. Sonuçta sütunlar çok düzeyli olur. Okunabilirlik için sade raporda her ölçüt için ayrı pivot kurmak veya sütun adlarını sonradan tek düzeye çekmek tercih edilir.
İlgili rehberler
İlgili eğitimler
Kategori: Veri Analitiği ve İş Zekası