Come rimuovere tutte le righe in un numpy.ndarray che contengono valori non numerici


95

Fondamentalmente, sto facendo un'analisi dei dati. Ho letto in un set di dati come numpy.ndarray e alcuni valori mancano (o semplicemente non esserci, essere NaNo essere una stringa scritta " NA").

Voglio pulire tutte le righe che contengono qualsiasi voce come questa. Come posso farlo con un numpy ndarray?

Risposte:


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.]])

e riassegnalo a a.

Spiegazione: np.isnan(a)restituisce un array simile con Truewhere NaN, Falsealtrove. .any(axis=1)riduce un m*narray a ncon un'operazione logica orsu intere righe, ~inverte True/Falsee a[ ]sceglie solo le righe dell'array originale, che hanno Truetra parentesi.


11
np.isfiniteè utile anche in questo caso, così come quando vuoi sbarazzarti dei ±Infvalori. Non richiede il ~, poiché restituisce vero solo per reali finiti.
nought101

7
@ naught101 Devi anche passare anya all. Dal momento che si desidera selezionare le righe in cui "tutti sono finiti", invece di selezionare le righe in cui "nessuno è nan".
AnnanFay
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.