NaN, pandalarda sürekli olarak eksik veri için yer tutucu olarak kullanılır , tutarlılık iyidir. Genellikle NaN'yi "eksik" olarak okurum / tercüme ederim . Ayrıca dokümanlardaki 'eksik verilerle çalışma' bölümüne bakın.
Wes, belgelerde 'NA-temsili seçimi' yazıyor :
Yıllarca süren üretimden sonra [NaN] kullanımı, en azından bence, NumPy ve Python'daki genel durum göz önüne alındığında en iyi karar olduğunu kanıtladı. NaN (Not-A-Number) değeri, her yerde NA değeri olarak kullanılır ve API işlevleri vardır isnull
ve notnull
bunlar, NA değerlerini tespit etmek için dtype'lerde kullanılabilir.
...
Bu nedenle, Pythonic “pratiklik saflığı yener” yaklaşımını seçtim ve şamandıra ve nesne dizilerinde NA'yı belirtmek için özel bir değer kullanmak ve NA'lar olması gerektiğinde tamsayı dizilerini yüzmeye teşvik etmek gibi çok daha basit bir yaklaşım için tamsayı NA yeteneğini seçtim. tanıtıldı.
Not: Eksik verileri içeren tamsayı Serilerinin yüzer sayıya yükseltildiğini "yakaladım" .
Bence temel nedeni (Hiçbiri üzerinden) NaN kullanmak oldukça az verimli nesne d_type daha, numpy en float64 d_type ile saklanabilir olmasıdır bkz promosyonlar yazın NA .
s_bad = pd.Series([1, None], dtype=object)
s_good = pd.Series([1, np.nan])
In [13]: s_bad.dtype
Out[13]: dtype('O')
In [14]: s_good.dtype
Out[14]: dtype('float64')
Jeff bu konuda yorum yapıyor (aşağıda):
np.nan
vektörleştirilmiş işlemlere izin verir; onun bir float değeri, None
tanımı gereği nesne tipini zorlar, bu da temelde numpy'deki tüm verimliliği devre dışı bırakır.
Bu yüzden 3 kez hızlı tekrarlayın: nesne == kötü, float == iyi
Bunu söyleyerek, birçok işlem hala Yok ve NaN ile aynı şekilde çalışabilir (ancak belki desteklenmez, yani bazen şaşırtıcı sonuçlar verebilirler ):
In [15]: s_bad.sum()
Out[15]: 1
In [16]: s_good.sum()
Out[16]: 1.0
: İkinci soruya cevap vermek için
kullanarak gerektiğini pd.isnull
ve pd.notnull
(NaN) verileri eksik test etmek.
qwerty
bir sayı değil.