Skip to content

nan (nicht eine Zahl) in Python

Python

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