NumPy ve Pandas Karşılaştırması: Sayısal Dizi mi, Etiketli Tablo mu?
Karşılaştırma

NumPy ve Pandas Karşılaştırması: Sayısal Dizi mi, Etiketli Tablo mu?

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

NumPy dizileri ile Pandas tablolarını veri modeli, hız, eksik veri ve gruplama açısından karşılaştırın; hangi işte hangisini seçeceğinizi görün.

Ortak zemin: aynı yığının farklı katmanları

NumPy ve Pandas birbirinin rakibi değil, Python veri yığınında üst üste duran katmanlardır. NumPy, Python'a hızlı ve bellek açısından verimli çok boyutlu dizileri (ndarray) ve bu diziler üzerinde çalışan matematik fonksiyonlarını kazandırır. Pandas ise bu sayısal temelin üzerine satır ve sütun etiketli tablolar (DataFrame) ile tek sütunluk serileri (Series) ekler.

Bu yüzden "hangisini öğrenmeliyim" sorusunun yanıtı çoğu zaman "ikisini de, ama farklı derinlikte" olur. Bir veri analisti günlük işinin büyük bölümünü Pandas ile yürütür; makine öğrenmesi modeline veri verirken, görüntü ya da sinyal işlerken veya özel bir hesaplama yazarken NumPy dizilerine iner. Pandas sütunlarının içinde de çoğu durumda NumPy dizileri bulunduğundan, iki kütüphane arasında geçiş tek bir çağrıyla yapılır.

Veri modeli farkı: homojen dizi ve karışık tipli tablo

NumPy belgelerine göre ndarray, homojen veri tiplerinden oluşan n boyutlu bir dizidir: bir dizideki tüm elemanlar aynı tiptedir ve dizinin boyutu oluşturulduğu anda sabitlenir. Bu katı yapı, işlemcinin veriyi bitişik bellek bloğu olarak hızla taramasını sağlar; vektör, matris ve daha yüksek boyutlu tensör hesapları için idealdir.

Pandas belgeleri DataFrame'i "iki boyutlu, boyutu değiştirilebilir, potansiyel olarak heterojen tablo verisi" olarak tanımlar. Yani bir sütunda tarih, diğerinde metin, bir başkasında ondalık sayı bulunabilir; satır eklenip silinebilir. Her satırın bir indeksi, her sütunun bir adı vardır ve işlemler bu etiketlere göre hizalanır. NumPy'de bir değere konumla (satır ve sütun sırası) erişirsiniz; Pandas'ta ise "müşteri kodu şu olan satırın ciro sütunu" gibi anlamlı bir adla erişebilirsiniz.

Temel farklar ölçüt ölçüt

  • Temel yapı: NumPy, ndarray (tek tipli, n boyutlu dizi) / Pandas, DataFrame ve Series (etiketli, sütun bazında farklı tipli tablo).
  • Erişim biçimi: NumPy, konuma dayalı indeksleme ve dilimleme / Pandas, etikete dayalı (loc) ve konuma dayalı (iloc) seçim birlikte.
  • Eksik veri: NumPy'de eksik değer için ayrı bir kavram yoktur, genellikle NaN kullanılır ve yalnız ondalık dizilerde çalışır / Pandas'ta eksik değer birinci sınıf kavramdır; isna, fillna, dropna gibi araçlarla tespit edilip doldurulur.
  • Dosya ve kaynak okuma: NumPy, düz sayısal dosyalar için sınırlı okuma fonksiyonları sunar / Pandas, CSV, Excel, JSON, SQL sorgusu ve Parquet gibi kaynaklardan doğrudan tablo okur.
  • Gruplama ve birleştirme: NumPy'de bunları elle kurmanız gerekir / Pandas'ta groupby, merge, pivot_table hazırdır.
  • Zaman serisi: NumPy'de tarih tipi vardır ama yardımcı araçlar sınırlıdır / Pandas'ta tarih indeksi, yeniden örnekleme (resample) ve kayan pencere (rolling) işlemleri yerleşiktir.
  • Hız ve bellek: saf sayısal hesapta NumPy daha yalın ve genellikle daha hızlıdır / Pandas etiket ve tip yönetimi nedeniyle ek yük taşır, buna karşılık analiz kodunu çok kısaltır.
  • Tipik kullanıcı: NumPy, bilimsel hesaplama, makine öğrenmesi ve görüntü işleme geliştiricileri / Pandas, veri analistleri, iş analitiği ve raporlama ekipleri.

Aynı işi iki kütüphaneyle yapmak

Örneğin bir satış dosyasında her satırın birim fiyatı ve adedi var ve bölge bazında ciro isteniyor. NumPy ile çarpımı vektörel olarak yapmak kolaydır:

fiyat = np.array(fiyat_listesi) adet = np.array(adet_listesi) ciro = fiyat * adet

Ancak bölge bilgisini ayrı bir dizide tutmanız, bölgeleri np.unique ile bulup her biri için maske kurmanız ve toplamları kendiniz eşleştirmeniz gerekir. Aynı iş Pandas'ta okunabilir birkaç satıra iner:

df = pd.read_csv("satislar.csv") df["ciro"] = df["fiyat"] * df["adet"] df.groupby("bolge")["ciro"].sum()

Fark burada belirginleşir: çarpma işleminin kendisi iki kütüphanede de aynı vektörel mantıkla çalışır, ama veriyi okumak, sütunları adıyla tutmak ve gruplamak Pandas'ın işidir. Tersine, bir korelasyon matrisinin özdeğerlerini hesaplamak ya da büyük bir matrisi çarpmak gerektiğinde DataFrame'i to_numpy ile diziye çevirip NumPy'nin doğrusal cebir fonksiyonlarını kullanmak daha doğrudur.

Hangi durumda hangisi?

NumPy'yi öne alın: • Veri baştan sona sayısal ve tek tipliyse (sensör ölçümleri, görüntü pikselleri, simülasyon çıktıları). • Matris çarpımı, doğrusal cebir, rastgele sayı üretimi, Fourier dönüşümü gibi matematiksel işlemler yapıyorsanız. • Bir makine öğrenmesi kütüphanesine ya da derin öğrenme çerçevesine veri hazırlıyorsanız; bu araçlar girdiyi dizi olarak bekler. • Döngü içinde çok sayıda küçük hesap yapan, performansı kritik bir fonksiyon yazıyorsanız.

Pandas'ı öne alın: • Veri bir tablo gibi duruyorsa: müşteri, sipariş, ürün, tarih sütunları. • Temizleme, eksik değer doldurma, tip dönüştürme, yinelenen kayıt silme işleri varsa. • Birden fazla dosyayı ya da tabloyu anahtarla birleştirecek, gruplayıp özetleyecekseniz. • Sonuç bir rapora, Excel çıktısına ya da görselleştirmeye gidecekse.

Veri belleğe sığmayacak kadar büyüdüğünde ise soru NumPy ile Pandas arasında olmaktan çıkar; Polars, PySpark ya da veritabanı tarafında işlem gibi seçenekler devreye girer.

Birlikte kullanım ve sık yapılan hatalar

Gerçek projelerde akış genellikle şöyledir: veri Pandas ile okunur ve temizlenir, özellik mühendisliği Pandas'ta yapılır, model eğitimi için to_numpy ile diziye geçilir, model çıktısı yeniden DataFrame'e bağlanıp raporlanır. NumPy'nin evrensel fonksiyonları (np.log, np.where, np.clip gibi) doğrudan Pandas sütunlarına uygulanabilir ve sonuç yine etiketli bir seri olarak döner.

Sık yapılan hatalar: • Pandas'ta satır satır döngü (iterrows) kurmak. Aynı iş çoğu zaman vektörel sütun işlemiyle ya da np.where ile çok daha hızlı yapılır. • Tamsayı sütununa eksik değer gelince tipin ondalığa dönüşmesini fark etmemek; kimlik numaraları bu yüzden bozulabilir. • NumPy dizisine dönüştürürken sütun adlarını ve indeksi kaybedip sonucu yanlış satırlarla eşleştirmek. • Karışık tipli bir DataFrame'i to_numpy ile çevirince her şeyin object tipine düştüğünü ve hesabın yavaşladığını gözden kaçırmak. • Bir dilimin kopya mı görünüm mü olduğunu bilmeden değer atamak; Pandas bu durumda uyarı verir, NumPy'de ise dilim üzerindeki değişiklik ana diziyi sessizce değiştirebilir.

Mindset programlarında NumPy ve Pandas

Python NumPy ile Sayısal Hesaplama eğitimi, dizi yapılarından yayın (broadcasting), evrensel fonksiyonlar ve doğrusal cebire uzanan modülleriyle mühendislik, Ar-Ge ve veri bilimi ekiplerinde hesap yoğun kod yazan kişilere yöneliktir. Python ile Veri Analizi (Pandas) eğitimi ise veri temizleme, gruplama ve pivot analizi ile veri birleştirme modülleri üzerinden raporlama ve iş analitiği yapan ekiplerin günlük tablo işine odaklanır.

Verisi büyüyen ve Pandas kodunun yavaşladığını gören ekipler için Pandas ve Polars ile Ölçeklenebilir Veri İşleme eğitimi, bellek ve hız optimizasyonu ile tembel değerlendirme konularını ele alır. Kurumsal ekiplerde bu başlıklar, analist ve geliştiricinin aynı veri akışında ortak bir dil kurmasına yardım edecek şekilde birlikte planlanabilir.

İlgili Mindset programı

Python NumPy ile Sayısal Hesaplama

Sık sorulanlar

Sık sorulan sorular

Pandas öğrenmek için önce NumPy bilmek gerekir mi?

Zorunlu değil. Pandas ile tablo okumaya, filtrelemeye ve gruplamaya doğrudan başlanabilir. Yine de dizi, vektörel işlem ve veri tipi kavramlarını NumPy üzerinden kısaca öğrenmek, Pandas'ta neden döngü yerine sütun işlemi kullanıldığını ve tip dönüşümü hatalarının nereden geldiğini anlamayı kolaylaştırır.

Pandas, NumPy'den daha mı yavaştır?

Saf sayısal bir işlemde NumPy genellikle daha yalındır, çünkü etiket hizalama ve tip yönetimi yapmaz. Ancak Pandas'ın vektörel sütun işlemleri de arka planda dizi hesabı kullandığından fark çoğu analiz işinde belirleyici değildir. Asıl yavaşlık Pandas'ta satır satır döngü kurulduğunda ortaya çıkar.

DataFrame'i NumPy dizisine nasıl çeviririm?

df.to_numpy() ya da tek bir sütun için df["sutun"].to_numpy() kullanılır. Dönüşümden önce yalnız sayısal sütunları seçmek önemlidir; aksi halde karışık tipler nedeniyle dizi object tipine düşer. Ters yönde ise pd.DataFrame(dizi, columns=sutun_adlari) ile etiketler yeniden eklenir.

Excel'deki işleri Python'a taşımak için hangisi gerekir?

Tablo mantığıyla çalışan Excel işleri için Pandas doğal karşılıktır: read_excel ile dosya okunur, pivot_table ile özet tablo, merge ile düşeyara benzeri eşleştirme yapılır, to_excel ile sonuç yazılır. NumPy bu senaryoda daha çok koşullu hesaplar için np.where gibi yardımcı fonksiyonlarla devreye girer.

NumPy mı Pandas mı? Farklar ve Kullanım Alanları