- Eksik değer nedir, pandas nasıl gösterir?
- Eksik veriyi tespit etme: nerede, ne kadar?
- Silmek mi, doldurmak mı? Karar ölçütleri
- dropna: satır ve sütun silmek
- fillna ve taşıma yöntemleriyle doldurma
- Grup bazlı doldurma: sektöre, bölgeye göre
- Sık yapılan hatalar
- Mindset programlarında bu beceri nerede çalışılır?
- Sık sorulan sorular
Pandas'ta eksik değerleri bulma ve doldurma
Pandas'ta eksik değerleri isna ile bulma, dropna ile silme, fillna, ffill ve interpolate ile doldurma; hangi yöntemin ne zaman seçileceği.
Eksik değer nedir, pandas nasıl gösterir?
Eksik değer, bir hücrede bilginin bulunmadığını gösterir. Pandas bunu veri türüne göre farklı işaretlerle tutar: ondalıklı ve nesne sütunlarında np.nan, tarih-saat türlerinde NaT, tam sayı ve metin gibi nullable türlerde pd.NA. Pandas belgeleri bunların hepsini isna ve notna işlevleriyle tespit etmenizi önerir.
Önemli bir tuzak: eksik değerler eşitlik karşılaştırmasıyla bulunamaz. np.nan == np.nan sonucu yanlıştır; bu yüzden veri[sutun] == np.nan gibi filtreler hiçbir şey döndürmez. Her zaman isna kullanın. Bir başka tuzak, eksik değerin her zaman boş görünmemesidir: dosyada “-”, “yok”, “N/A” gibi yer tutucular metin olarak okunur ve pandas bunları eksik saymaz. Doldurmaya başlamadan önce eksikliğin gerçekten nasıl temsil edildiğini görmek gerekir.
Eksik veriyi tespit etme: nerede, ne kadar?
Önce toplam resme bakın:
import pandas as pd
df.info() df.isna().sum() df.isna().mean()
info sütun başına dolu değer sayısını, isna().sum() eksik sayısını, isna().mean() ise eksik oranını verir. Eksik oranı yüksek bir sütun çoğu zaman doldurulmaz, çıkarılır ya da ayrı ele alınır.
Satır bazlı bakış için df[df.isna().any(axis="columns")] ifadesi en az bir eksiği olan satırları listeler. Eksiklerin rastgele mi yoksa bir örüntüye mi sahip olduğunu anlamak için, eksik göstergesi (bir sütundaki eksikliğin doğru ya da yanlış hâli) ile diğer sütunlar arasındaki ilişkiye bakın: örneğin gelir bilgisinin yalnızca belirli bir kanaldan gelen müşterilerde boş olması, doldurma stratejisini değiştirir.
Yer tutucuları eksik değere çevirmek için dosyayı okurken na_values parametresini, okunmuş veride ise replace kullanın: df.replace("-", np.nan). Yer tutucuları gerçek eksiğe çevirmeden yapılan her hesap yanlış çıkabilir.
Silmek mi, doldurmak mı? Karar ölçütleri
Hangi yöntemin seçileceği eksikliğin nedenine, oranına ve analizin amacına bağlıdır: • Eksik oranı çok düşük ve rastgele ise o satırları silmek (dropna) çoğunlukla kabul edilebilir. • Bir sütun büyük ölçüde boşsa, sütunu çıkarmak ya da “bilinmiyor” kategorisi olarak ele almak daha dürüsttür. • Zaman serisinde boşluk varsa ileri-geri taşıma ya da interpolasyon uygundur. • Gruplar arası farklar anlamlıysa, grup ortalamasıyla doldurmak genel ortalamadan daha gerçekçidir. • Eksiklik başlı başına bilgi taşıyorsa (müşteri bu alanı bilerek boş bıraktı), doldurmadan önce “eksikti” işaret sütunu ekleyin.
Hiçbir doldurma yöntemi kayıp bilgiyi geri getirmez; yalnızca analiz için kullanılabilir bir değer koyar. Bu yüzden yaptığınız tercihi raporda belirtin ve mümkünse sonucun doldurma yöntemine duyarlılığını farklı seçeneklerle sınayın.
dropna: satır ve sütun silmek
dropna varsayılan olarak içinde en az bir eksik olan satırları atar. Davranışı şu parametrelerle ayarlanır: • how="all": yalnızca tüm değerleri eksik olan satırları atar. • subset: yalnızca belirtilen sütunlardaki eksiklere bakar. Örneğin df.dropna(subset=["tutar", "customer_id"]) anahtar alanları boş olan satırları temizler, diğer boşlukları bırakır. • thresh: bir satırın tutulması için gereken en az dolu değer sayısını belirler.
axis="columns" verirseniz satır yerine sütunlar silinir. Silmeden önce kaç satırın gittiğini kaydedin: öncesi ve sonrası satır sayısını karşılaştırmak, veri kaybının boyutunu ve sonuçlara etkisini gösterir. Satırlar rastgele değil de belirli bir gruptan siliniyorsa analiz yanlı hâle gelir; silinen satırların profilini inceleyin.
fillna ve taşıma yöntemleriyle doldurma
fillna, eksikleri bir değerle doldurur. Sabit değer, sütun ortalaması ya da ortancası kullanılabilir:
df["tutar"] = df["tutar"].fillna(df["tutar"].median()) df["kategori"] = df["kategori"].fillna("Bilinmiyor")
Ortanca, uç değerlere ortalamadan daha dayanıklıdır; çarpık dağılımlarda genellikle daha güvenli seçimdir. Metin sütunlarında sabit bir etiket kullanmak ya da en sık değeri (mode) yazmak seçeneklerdir.
Zaman sıralı veride ffill son geçerli değeri ileri taşır, bfill sonrakini geriye çeker. Örneğin sensör okumasında kısa kopukluklar için ffill makuldür; ancak uzun boşlukları aynı değerle doldurmak sahte durağanlık üretir. limit parametresiyle art arda doldurulacak eksik sayısını sınırlayabilirsiniz.
interpolate ise geçerli değerler arasını doğrusal ya da başka yöntemle tahmin eder. Tarih indeksli seriler için method="time" aralıkları zamana göre ağırlıklandırır. Pandas belgeleri, hangi enterpolasyon yönteminin hangi veri türüne uygun olduğunu ayrıca anlatır.
Grup bazlı doldurma: sektöre, bölgeye göre
Tek bir genel ortalamayla doldurmak gruplar arası farkları siler. Örneğin farklı şehirlerdeki satış tutarları eksikse, şehrin kendi ortancasıyla doldurmak daha mantıklıdır. groupby ile transform bunu tek satırda yapar:
df["tutar"] = df["tutar"].fillna(df.groupby("sehir")["tutar"].transform("median"))
Burada transform, her satıra kendi şehrinin ortancasını getirir; fillna yalnızca eksik olanları bu değerle değiştirir. Pandas belgeleri de gruplara göre eksik doldurmak için transform ile fillna birleşimini gösterir.
Bir grupta hiç dolu değer yoksa sonuç yine eksik kalır; bu durumda ayrı bir adımda genel ortancayla tamamlayabilirsiniz. Her doldurmadan sonra df.isna().sum() ile kalan eksikleri kontrol edin ve doldurulan satırlar için işaret sütunu tutmayı değerlendirin.
Sık yapılan hatalar
- Eşitlikle eksik aramak: veri[sutun] == np.nan her zaman yanlıştır; isna kullanın.
- Yer tutucuları fark etmemek: “-” ve “N/A” metin olarak kalır, ortalama hesabını bozar.
- Tüm sütunu aynı yöntemle doldurmak: Sayısal, kategorik ve tarih sütunları farklı yaklaşım ister.
- Tüm veriye dayanarak doldurup sonra modeli ayırmak: Makine öğrenmesi hazırlığında doldurma değerlerini yalnızca eğitim verisinden hesaplayın; aksi halde bilgi sızar.
- Ortalamayı uç değerli veride kullanmak: Ortanca çoğu zaman daha güvenlidir.
- Doldurduktan sonra kontrol etmemek: Kalan eksikleri ve dağılımın değişip değişmediğini sınayın.
- Doldurma kararını belgelememek: Raporu okuyan kişi hangi değerlerin gerçek, hangilerinin tahmin olduğunu bilmelidir.
- Büyük oranda boş sütunu doldurmak: Uydurma bilgiyle analiz kurmak yerine sütunu çıkarın.
Mindset programlarında bu beceri nerede çalışılır?
Eksik veri yönetimi, veri temizlemenin merkezindedir ve analiz kalitesini doğrudan belirler. Mindset'in Python ile Veri Temizleme eğitimi Eksik Veri Yönetimi ve Atama Stratejileri modülüyle bu konuyu derinleştirir; Veri Kalitesi Tanılama ve Keşif modülü eksikliğin nerede ve neden oluştuğunu bulmayı, Tekrarlanabilir Veri Temizleme Boru Hatları ise adımları yeniden çalıştırılabilir hâle getirmeyi işler.
Python ile Veri Analizi (Pandas) eğitiminin Veri Temizleme ve Ön İşleme Teknikleri modülü de temel yöntemleri verir. Bu içerik, ham dosyalarla çalışan veri analistleri, iş analistleri ve raporlama ekipleri için uygundur. Kurumsal ekipler eksik veri kurallarını ortak bir temizleme standardına bağlayarak raporlar arası tutarlılığı artırabilir.
İlgili Mindset programı
Python ile Veri Temizleme
Sık sorulan sorular
Pandas'ta eksik değerleri nasıl bulurum?
isna ya da notna kullanın; df.isna().sum() her sütunun eksik sayısını verir. Eşitlik karşılaştırmasıyla (== np.nan) eksik değer bulunamaz. Dosyada yer tutucu metinler varsa onları önce replace veya okuma sırasındaki na_values ile gerçek eksik değere çevirin.
Eksik veriyi silmek mi doldurmak mı daha doğru?
Eksik oranı düşük ve rastgeleyse silmek yeterli olabilir. Oran yüksekse ya da eksiklik bilgi taşıyorsa doldurma ya da ayrı kategori daha uygundur. Her durumda tercihi ve satır kaybını raporlayın, mümkünse sonucu farklı yöntemlerle sınayın.
fillna ile ortalama mı ortanca mı kullanmalıyım?
Uç değerler ve çarpık dağılım varsa ortanca daha dayanıklıdır; dağılım simetrikse ortalama da kabul edilebilir. Gruplar arası fark anlamlıysa genel değer yerine grubun kendi ortancasını kullanın. Metin sütunlarında sabit etiket ya da en sık değer seçilir.
ffill ve interpolate arasındaki fark nedir?
ffill son geçerli değeri olduğu gibi ileri taşır, bfill sonraki değeri geriye taşır. interpolate ise geçerli değerler arasında geçiş değerleri tahmin eder. Seviyeyi koruyan kategorik ya da durum verisinde ffill, sürekli ölçümlerde interpolate daha uygundur.
pd.NA ile np.nan arasındaki fark nedir?
np.nan ondalıklı ve nesne sütunlarında kullanılan eksik değer işaretidir. pd.NA nullable türlerde (tam sayı, metin, mantıksal) kullanılır. İkisi de isna ile bulunur. pd.NA işlemlere yayılır ve mantıksal ifadelerde çok değerli mantık kullanılır; bool dönüşümü hata verir.
İlgili rehberler
İlgili eğitimler
Kategori: Veri Analitiği ve İş Zekası, Veri Mühendisliği ve MLOps