Bir numpy.ndarray'deki sayısal olmayan değerler içeren tüm satırlar nasıl kaldırılır


95

Temel olarak, bazı veri analizi yapıyorum. Bir veri kümesini numpy.ndarray olarak okudum ve bazı değerler eksik (ya orada bulunmayarak NaN, ya da " NA" yazarak ).

Bunun gibi herhangi bir giriş içeren tüm satırları temizlemek istiyorum. Bunu bir ndarray ile nasıl yaparım?

Yanıtlar:


164
>>> a = np.array([[1,2,3], [4,5,np.nan], [7,8,9]])
array([[  1.,   2.,   3.],
       [  4.,   5.,  nan],
       [  7.,   8.,   9.]])

>>> a[~np.isnan(a).any(axis=1)]
array([[ 1.,  2.,  3.],
       [ 7.,  8.,  9.]])

ve bunu adresine yeniden atayın a.

Açıklama: np.isnan(a)benzer bir dizi döndürür , başka yerde. bir diziyi tüm satırlarda mantıksal bir işlemle küçültür , ters çevirir ve yalnızca parantez içinde bulunan orijinal diziden satırları seçer .TrueNaNFalse.any(axis=1)m*nnor~True/Falsea[ ]True


11
np.isfinitebu durumda ve ±Infdeğerlerden kurtulmak istediğinizde de kullanışlıdır . ~Yalnızca sonlu gerçekler için true döndürdüğü için , gerektirmez .
naught101

7
@ naught101 Ayrıca olarak değiştirmeniz anygerekiyor all. "Hiçbirinin nan olmadığı" satırları seçmek yerine, "tümünün sonlu olduğu" satırları seçmek istediğinizden.
AnnanFay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.