373 Stimmen

Wie kann ich NaN-Werte aus einem NumPy-Array entfernen?

Wie kann ich NaN-Werte aus einem NumPy-Array entfernen?

[1, 2, NaN, 4, NaN, 8]      [1, 2, 4, 8]

598voto

jmetz Punkte 11067

Um NaN-Werte aus einem NumPy-Array zu entfernen x :

x = x[~numpy.isnan(x)]
Erläuterung

Die innere Funktion numpy.isnan gibt ein boolesches/logisches Array zurück, das den Wert True überall dort, wo x ist eine Nicht-Zahl. Da wir das Gegenteil wollen, verwenden wir den Operator logisch-nicht ~ um ein Array zu erhalten mit True s überall, dass x ist eine gültige Nummer.

Schließlich verwenden wir dieses logische Array als Index für das ursprüngliche Array x um nur die Nicht-NaN-Werte abzurufen.

76voto

udibr Punkte 1011
filter(lambda v: v==v, x)

funktioniert sowohl für Listen als auch für Numpy-Arrays da v!=v nur für NaN

44voto

Daniel Kislyuk Punkte 798

Bei mir hat die Antwort von @jmetz nicht funktioniert, die Verwendung von pandas isnull() hingegen schon.

x = x[~pd.isnull(x)]

36voto

liori Punkte 38648

Versuchen Sie dies:

import math
print [value for value in x if not math.isnan(value)]

Weitere Informationen finden Sie unter Auflistung von Zusammenfassungen .

24voto

M4urice Punkte 521

@jmetz's Antwort ist wahrscheinlich diejenige, die die meisten Leute brauchen; allerdings ergibt sie ein eindimensionales Array, was es z.B. unbrauchbar macht, ganze Zeilen oder Spalten in Matrizen zu entfernen.

Dazu sollte man das logische Array auf eine Dimension reduzieren und dann das Zielarray indizieren. Im Folgenden werden zum Beispiel Zeilen entfernt, die mindestens einen NaN-Wert haben:

x = x[~numpy.isnan(x).any(axis=1)]

Siehe mehr Details aquí .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X