So entfernen Sie alle Zeilen in einer numpy.ndarray, die nicht numerische Werte enthalten


91

Grundsätzlich mache ich eine Datenanalyse. Ich habe einen Datensatz als numpy.ndarray eingelesen und einige der Werte fehlen (entweder weil ich einfach nicht da bin, weil ich da binNaN oder weil ich eine Zeichenfolge geschrieben habe " NA").

Ich möchte alle Zeilen löschen, die einen solchen Eintrag enthalten. Wie mache ich das mit einem numpy ndarray?

Antworten:


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

und ordnen Sie dies neu zu a.

Erläuterung: np.isnan(a)Gibt ein ähnliches Array mit Truewhere NaNan Falseanderer Stelle zurück. .any(axis=1)reduziert ein m*nArray auf nmit einer logischen orOperation für die gesamten Zeilen, ~invertiert True/Falseund a[ ]wählt nur die Zeilen aus dem ursprünglichen Array aus, die Truein den Klammern stehen.


10
np.isfiniteist auch in diesem Fall nützlich, wenn Sie ±InfWerte entfernen möchten . Es erfordert das nicht ~, da es nur für endliche Realzahlen true zurückgibt.
naught101

6
@ naught101 Sie müssen auch Änderungen anyan all. Da Sie Zeilen auswählen möchten, in denen "alle endlich sind", anstatt Zeilen auszuwählen, in denen "keine nan" sind.
AnnanFay
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.