HOWTO · Python
Entfernen Sie NaN aus der Liste in Python
Dieses Tutorial zeigt, wie Sie NaN aus der Liste in Python entfernen.
Auf dieser Seite
NaN ist ein spezieller Gleitkommawert, der häufig ein undefiniertes oder nicht darstellbares numerisches Ergebnis repräsentiert. Er unterscheidet sich von der gewöhnlichen Zeichenkette 'nan'. Verwenden Sie für eine numerische Liste Python’s math.isnan() und für numerische Arrays NumPys numpy.isnan(). Vergleichen Sie Zeichenkettenwerte direkt, wenn Sie das wörtliche 'nan' entfernen möchten. Bei gemischten Daten mit numerischem NaN und der Zeichenkette 'nan' kombinieren Sie pandas.isnull() mit einem Zeichenkettenvergleich.
NaN mit math.isnan() aus einer Python-Liste entfernen
Die Funktion math.isnan() aus Pythons Standardbibliothek erkennt numerische NaN-Werte. Sie ist eine Funktion und keine Methode. NaN ist nicht gleich sich selbst. Deshalb kann eine Prüfung wie x != x den Wert erkennen; mit math.isnan() wird die Absicht jedoch klarer. Verwenden Sie diesen Ansatz, wenn die Liste numerische Werte enthält, die math.isnan() verarbeiten kann. Für beliebige Zeichenketten oder Objekte ist die Funktion nicht geeignet. Die math.isnan()-Referenz ist nur auf Englisch verfügbar; der englische Link bleibt daher unverändert.
Dieses vollständige Beispiel filtert eine numerische Liste, ohne die ursprüngliche Liste zu verändern:
import math
values = [1, 2, float("nan"), 4]
without_nan = [value for value in values if not math.isnan(value)]
print(without_nan)
[1, 2, 4]
NaN mit numpy.isnan() aus einer Python-Liste entfernen
Wenn NumPy bereits Teil Ihres Projekts ist, können Sie mit numpy.isnan() numerische Werte in einer Liste oder einem Array prüfen. Installieren Sie NumPy bei Bedarf mit python -m pip install numpy. Das Beispiel wandelt die Eingabe in ein Array um, erstellt eine boolesche Maske, wählt die Werte aus, die nicht NaN sind, und wandelt das Ergebnis wieder in eine Python-Liste um. Das Endergebnis ist somit eine Liste und kein NumPy-Array.
import numpy as np
values = [1, 2, np.nan, 4]
array = np.array(values)
without_nan = array[~np.isnan(array)].tolist()
print(without_nan)
[1.0, 2.0, 4.0]
Die Zeichenkette ’nan’ aus einer Python-Liste entfernen
Ein Zeichenketten-Sentinel ist gewöhnlicher Text und kein Gleitkommawert NaN. Wenn Ihre Daten bereits als Liste von Zeichenketten vorliegen, entfernen Sie den exakten Kleinbuchstabenwert 'nan', indem Sie jedes Element direkt vergleichen. So bleiben Typ und Schreibweise aller übrigen Elemente erhalten. Passen Sie den Vergleich an, wenn Ihre Daten andere Groß- und Kleinschreibung oder Leerzeichen verwenden.
values = ["1", "2", "nan", "8"]
without_string_nan = [value for value in values if value != "nan"]
print(without_string_nan)
['1', '2', '8']
Wenn Sie zuerst jedes Element mit str() umwandeln, werden auch beibehaltene Zahlen zu Zeichenketten. Das kann bei der Vereinheitlichung von Daten nützlich sein, ändert aber die Typen im Ergebnis. Um eine bereits in der Liste enthaltene Zeichenkette zu entfernen, ist diese Umwandlung nicht erforderlich.
NaN und die Zeichenkette ’nan’ mit pandas.isnull() aus einer gemischten Python-Liste entfernen
Verwenden Sie bei einer gemischten Liste pandas.isnull(), um fehlende Werte wie numerisches NaN zu erkennen. Prüfen Sie die einzelnen Werte zusätzlich auf die wörtliche Zeichenkette 'nan'. pandas.isnull() behandelt den Text 'nan' nicht als fehlenden Wert. Das folgende Beispiel benötigt pandas (python -m pip install pandas) und behält die ursprünglichen Typen anderer Zeichenketten und Zahlen bei. Die Referenz zu pandas.isnull() beschreibt die Prüfung auf fehlende Werte.
import pandas as pd
values = ["Ada", 23, "nan", "London", float("nan")]
without_missing_or_string_nan = [
value
for value in values
if not pd.isnull(value) and value != "nan"
]
print(without_missing_or_string_nan)
['Ada', 23, 'London']