In Python hat der Float-Typ nan. nan steht für „not a number“ und ist durch den IEEE 754 Fließkommastandard definiert.
Dieser Artikel hat folgenden Inhalt.
- nan ist ein Gleitkommawert in Python
- Nan erstellen:
float('nan'), math.nan, numpy.nan
- Überprüfen Sie, ob ein Wert nan ist:
math.isnan(), np.isnan()
- Verhalten für Vergleichsoperatoren (<, >, ==, ! =) mit nan
- Überprüfen Sie nan in der if-Anweisung
- Entfernen und ersetzen Sie sie in einer Liste
- Operationen mit Oma
In den following Artikeln erfahren Sie, wie Sie nan in NumPy und Pandas entfernen und ersetzen.
nan ist ein Gleitkommawert in Python
In Python hat der Float-Typ nan. Sie können nan mit float(’nan‘) erstellen. Andere Erstellungsmethoden werden später beschrieben.
import math
import numpy as np
import pandas as pd
print(float('nan'))
# nan
print(type(float('nan')))
# <class 'float'>
Wenn Sie beispielsweise eine CSV-Datei in NumPy oder Pandas lesen, werden die fehlenden Werte durch nan (NaN in Pandas) dargestellt.
a = np.genfromtxt('data/src/sample_nan.csv', delimiter=',')
print(a)
# [[11. 12. nan 14.]
# [21. nan nan 24.]
# [31. 32. 33. 34.]]
df = pd.read_csv('data/src/sample_pandas_normal_nan.csv')[:3]
print(df)
# name age state point other
# 0 Alice 24.0 NY NaN NaN
# 1 NaN NaN NaN NaN NaN
# 2 Charlie NaN CA NaN NaN
Nan erstellen:float('nan'), math.nan, numpy.nan
Wie oben beschrieben, can SIE nan mit float(’nan‘) erzeugen. Groß- und Kleinschreibung wird nicht beachtet, sodass Sie „NaN“ und „NAN“ verwenden können.
print(float('nan'))
# nan
print(float('NaN'))
# nan
print(float('NAN'))
# nan
Darüber hinaus kann nan mit Mathematik (Standardbibliothek) und NumPy erstellt werden. Sowohl NaN als auch NAN sind in NumPy als Aliase definiert.
print(math.nan)
# nan
print(np.nan)
# nan
print(np.NaN)
# nan
print(np.NAN)
# nan
Sie sind äquivalent, unabhängig davon, welche Methode Sie zum Erstellen verwenden.
Überprüfen Sie, ob ein Wert nan ist:math.isnan(), np.isnan()
Sie können mit math.isnan() prüfen, ob ein Wert nan ist oder nicht.
print(math.isnan(float('nan')))
# True
print(math.isnan(math.nan))
# True
print(math.isnan(np.nan))
# True
numpy.isnan() wird ebenfalls bereitgestellt.
Als Argumente können neben skalaren Werten auch Array-ähnliche Objekte wie Listen und NumPy-Arrays ndarray angegeben werden.
print(np.isnan(float('nan')))
# True
print(np.isnan([float('nan'), math.nan, np.nan, 0]))
# [ True True True False]
pandas.DataFrame und Series haben die Methode isna() und ihren Alias isnull(), die True für nan und None zurückgeben.
Ein Fehler wird ausgelöst, wenn None für math.isnan() oder np.isnan() angegeben ist.
Verhalten für Vergleichsoperatoren (<, >, ==, ! =) mit nan
Beim Vergleich mit nan geben <, >, ==, <= und >= immer False zurück, und != gibt immer True zurück.
print(10 < float('nan'))
# False
print(10 > float('nan'))
# False
print(10 == float('nan'))
# False
print(10 != float('nan'))
# True
Dasselbe gilt für nan- und nan-Vergleiche. Beachten Sie, dass == und != kontraintuitive Ergebnisse liefern.
Jeder geordnete Vergleich einer Zahl mit einem Nicht-Zahl-Wert ist falsch. Eine kontraintuitive Implikation ist, dass Not-a-Number-Werte nicht gleich sich selbst sind. If beispielsweise x = float(‚NaN‘), 3 < x, x < 3 und x == x sind alle falsch, während x != x wahr ist. Dieses Verhalten entspricht IEEE 754.
6. Ausdrücke – Wertvergleiche – Dokumentation zu Python 3.10.2
print(float('nan') == float('nan'))
# False
print(float('nan') != float('nan'))
# True
Um zu überprüfen, ob ein Wert nan ist, verwenden Sie math.isnan() und numpy.isnan() anstelle von ==.
Überprüfen Sie nan in der if-Anweisung
In Python werden auch andere Objekte als True und False im bedingten Ausdruck der if-Anweisung als wahr oder falsch betrachtet. Beispiel WIRD die leere Zeichenfolge “ oder die Zahl 0 als falsch angesehen, und andere Zeichenfolgen oder Zahlen werden als wahr betrachtet.be
Wie Sie mit bool() sehen können, wird nan als True ausgewertet.
print(bool(float('nan')))
# True
Verwenden Sie math.isnan() oder numpy.isnan().
x = float('nan')
if math.isnan(x):
print('This is nan.')
else:
print('This is not nan.')
# This is nan.
x = 100
if math.isnan(x):
print('This is nan.')
else:
print('This is not nan.')
# This is not nan.
Entfernen und ersetzen Sie sie in einer Liste
Wenn Sie nan in einer Liste entfernen oder ersetzen möchten, verwenden Sie Listenverständnisse, Bedingungsausdrücke (ternäre Operatoren) und math.isnan(), numpy.isnan().
l = [float('nan'), 0, 1, 2]
print(l)
# [nan, 0, 1, 2]
print([x for x in l if not math.isnan(x)])
# [0, 1, 2]
print([-100 if math.isnan(x) else x for x in l])
# [-100, 0, 1, 2]
Verwenden Sie einfach math.isnan() und numpy.isnan() für die Überprüfung, und das Konzept ist das gleiche wie in anderen Fällen des Entfernens und Ersetzens von Werten. Nichts finden Sie im folgenden Artikel.
In den following Artikeln erfahren Sie, wie Sie nan in NumPy und Pandas entfernen und ersetzen.
Operationen mit Oma
Operationen wie +, -, *, / und ** mit nan ergeben nan.
print(float('nan') + 100)
# nan
print(float('nan') - 100)
# nan
print(float('nan') - 100)
# nan
print(float('nan') / 100)
# nan
print(float('nan') ** 100)
# nan