Garfield
YZF Admin
İlk olarak hangi eksik kayıtları kaldıracağınızı belirleyin: satırda en az bir eksik değer varsa
Örnek olarak aşağıdaki varsayımsal DataFrame’de
Aynı yöntem farklı parametrelerle farklı kayıtları kaldırır. Hangi bilgiyi zorunlu kabul ettiğinize göre seçim yapın.
Bazı seçenekler birlikte kullanılabilir; ancak
Zorunlu alanları
Çıktıda Ayşe ve Zeynep kalır. Zeynep’in puanı eksik olmasına rağmen e-posta adresi bulunduğu için kaydı korunur. Bu sonuç,
Varsayılan kullanım yeni bir DataFrame döndürür ve
Özgün değişkenin doğrudan güncellenmesini istiyorsanız
Dikkat:
Eksik kayıtların beklediğiniz şekilde ele alındığını doğrulamak için önce ve sonra satır sayısını, ardından kalan eksik değerleri inceleyin.
Eksik kayıtların silinmesi veri kümesini küçültür ve özellikle çok sayıda eksik değer varsa analiz sonucunu etkileyebilir. Bir satırın diğer bilgileri değerliyse
Pratik seçim şu şekilde yapılabilir: kayıt ancak belirli bir alan olmadan kullanılamıyorsa
df.dropna(), yalnızca belirli sütunlarda eksik değer aranacaksa subset, tüm değerleri eksik olan satırlar için how='all' kullanılır. Böylece özgün DataFrame’i koruyarak temizlenmiş yeni bir DataFrame elde edebilir, işlem sonunda satır sayısını ve kalan eksik değerleri kontrol edebilirsiniz.dropna() ne yapar?
dropna(), pandas DataFrame veya Series içindeki eksik değerleri içeren satır ya da sütunları kaldırır. Varsayılan davranış, eksik değer bulunan satırları silmektir; bu nedenle yalnızca tek bir sütundaki eksiklik bile satırın elenmesine yol açabilir. Burada eksiklik, pandas’ın isna() ile tanıdığı None, NaN veya pd.NA gibi değerlerdir. Boş metin, yalnız boşluk içeren metin ve sonsuzluk kendiliğinden eksik sayılmaz; bunları iş kuralınıza göre ayrıca değerlendirin.Örnek olarak aşağıdaki varsayımsal DataFrame’de
email sütununda eksik değer bulunan ikinci kayıt vardır:
Python:
import pandas as pd
df = pd.DataFrame({
"ad": ["Ayşe", "Mehmet", "Zeynep"],
"email": ["[email protected]", None, "[email protected]"],
"puan": [85, 90, None]
})
temiz_df = df.dropna()
print(temiz_df)
temiz_df içinde yalnızca Ayşe’nin kaydı kalır. Mehmet’in email değeri, Zeynep’in ise puan değeri eksik olduğu için her iki satır da kaldırılır. Bu işlem eksik hücreleri doldurmaz; eksik hücre içeren kayıtları seçtiğiniz kurala göre eler.En sık kullanılan dropna seçenekleri
Aynı yöntem farklı parametrelerle farklı kayıtları kaldırır. Hangi bilgiyi zorunlu kabul ettiğinize göre seçim yapın.
| Kullanım | Etkisi |
|---|---|
df.dropna() | Herhangi bir sütununda eksik değer bulunan satırları kaldırır. |
df.dropna(how='all') | Yalnızca bütün değerleri eksik olan satırları kaldırır. |
df.dropna(subset=['email']) | Sadece email sütununu kontrol eder; bu sütun eksikse satırı kaldırır. |
df.dropna(axis=1) | Eksik değer içeren sütunları kaldırır. |
df.dropna(thresh=2) | En az iki eksik olmayan değeri bulunan satırları korur. |
how ile thresh aynı çağrıda birlikte verilemez. Örneğin bir kaydın email değeri zorunlu, puan değeri ise isteğe bağlıysa tüm sütunları denetleyen varsayılan dropna() yerine yalnızca email sütununu belirtmek daha uygundur. Böylece puanı eksik olan kayıtlar gereksiz yere silinmez.Belirli sütunlara göre kayıt silme
Zorunlu alanları
subset içinde belirtin. Aşağıdaki örnekte yalnızca adı veya e-posta adresi eksik olan kayıtlar kaldırılır; puan eksikliği silme koşulu değildir.
Python:
import pandas as pd
df = pd.DataFrame({
"ad": ["Ayşe", "Mehmet", "Zeynep"],
"email": ["[email protected]", None, "[email protected]"],
"puan": [85, 90, None]
})
temiz_df = df.dropna(subset=["ad", "email"])
print(temiz_df)
Çıktıda Ayşe ve Zeynep kalır. Zeynep’in puanı eksik olmasına rağmen e-posta adresi bulunduğu için kaydı korunur. Bu sonuç,
subset ile yalnızca iş açısından gerekli sütunların denetlendiğini gösterir; diğer sütunlardaki eksikliklerin çözüldüğü anlamına gelmez.Özgün DataFrame’i koruyarak uygulama
Varsayılan kullanım yeni bir DataFrame döndürür ve
df değişkenini değiştirmez. Temizlenmiş veriyi kullanmak için sonucu yeni bir değişkene atayın:
Python:
temiz_df = df.dropna(subset=["email"])
Özgün değişkenin doğrudan güncellenmesini istiyorsanız
inplace=True kullanılabilir:
Python:
df.dropna(subset=["email"], inplace=True)
Dikkat:
inplace=True sonrasında silinen satırlara df üzerinden erişemezsiniz. Karar vermeden önce özgün veriyi korumak, sonucu karşılaştırmak veya işlemi geri almak gerekebileceği için yeni değişkene atama genellikle daha güvenlidir.İşlemden sonra sonucu kontrol etme
Eksik kayıtların beklediğiniz şekilde ele alındığını doğrulamak için önce ve sonra satır sayısını, ardından kalan eksik değerleri inceleyin.
- İşlem öncesi satır sayısını kaydedin.
len(df)veyadf.shape[0]ile kaç kaydınız olduğunu görün. - Uygun dropna kuralını çalıştırın. Örneğin yalnızca e-posta adresi zorunluysa
df.dropna(subset=['email'])kullanın. - Yeni sonucu satır sayısıyla karşılaştırın.
len(temiz_df)değeri azaldıysa kayıtlar elenmiştir; azalma yoksa seçtiğiniz sütunlarda eksik değer bulunmuyor olabilir. - Kalan eksikleri sütun bazında kontrol edin.
temiz_df.isna().sum()her sütunda kaç eksik değer kaldığını gösterir. Bu değerlerin kalması,subsetdışında bırakılan sütunlarda eksiklik olabileceği anlamına gelir.
subset=['email'] kullandıktan sonra puan sütununda eksik değer kalması hata değildir; çünkü işlem yalnızca e-posta sütununu zorunlu kabul etmiştir. Puan da zorunluysa sütun adını listeye ekleyin veya eksik puanları silmek yerine alanın anlamına uygun başka bir yöntemle doldurun.Silmek yerine ne zaman başka yöntem kullanılmalı?
Eksik kayıtların silinmesi veri kümesini küçültür ve özellikle çok sayıda eksik değer varsa analiz sonucunu etkileyebilir. Bir satırın diğer bilgileri değerliyse
dropna() kullanmadan önce eksik değerleri fillna() ile uygun bir değerle doldurmayı değerlendirebilirsiniz. Ancak ortalama, sabit değer veya başka bir tahmin kullanımı veri alanının anlamına uygun olmalıdır; dropna() otomatik olarak hangi seçeneğin doğru olduğuna karar vermez.Pratik seçim şu şekilde yapılabilir: kayıt ancak belirli bir alan olmadan kullanılamıyorsa
subset ile o alanı zorunlu tutun; satırın hiçbir yararlı bilgisi kalmadığında how='all' kullanın; her eksik hücreyi kesinlikle istemiyorsanız varsayılan dropna() davranışını seçin. İşlemden sonra satır sayısını ve isna().sum() çıktısını birlikte kontrol etmeden temizleme işleminin amacına ulaştığını varsaymayın.