Skip to content

pandas: Zeilen/Spalten mit fehlenden Werten (NaN) extrahieren

Python

Sie können Zeilen/Spalten mit fehlenden Werten aus pandas.DataFrame extrahieren, indem Sie die Methode isnull() oder isna() verwenden, die prüft, ob ein Element ein fehlender Wert ist.

Dieser Artikel hat folgenden Inhalt.

  • Extrahieren Sie Zeilen/Spalten mit fehlenden Werten in bestimmten Spalten/Zeilen
  • Zeilen/Spalten mit mindestens einem fehlenden Wert extrahieren

Verwenden Sie die Methode dropna(), um Zeilen/Spalten zu extrahieren, bei denen alle Elemente nicht fehlende Werte sind, dh Zeilen/Spalten zu entfernen, die fehlenden Werte enthalten. Nichts finden Sie im folgenden Artikel.

Beachten Sie, dass nicht nur NaN (Not a Number), sondern auch None als fehlender Wert in Pandas behandelt wird.

Lesen Sie als Beispiel eine CSV-Datei mit fehlenden Werten mit read_csv().

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal_nan.csv')
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
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen   NaN    CA   88.0    NaN
# 5    Frank  30.0   NaN    NaN    NaN

Extrahieren Sie Zeilen/Spalten mit fehlenden Werten in bestimmten Spalten/Zeilen

Sie can die isnull()- oder isna()-Methode von pandas.DataFrame und Series verwenden, um zu prüfen, ob jedes Element ein fehlender Wert ist oder nicht.

print(df.isnull())
#     name    age  state  point  other
# 0  False  False  False   True   True
# 1   True   True   True   True   True
# 2  False   True  False   True   True
# 3  False  False  False  False   True
# 4  False   True  False  False   True
# 5  False  False   True   True   True

isnull() ist ein Alias ​​für isna(), dessen Verwendung dieselbe ist. In diesem Artikel WIRD hauptsächlich isnull() verwendet, aber SIE can es durch isna() ersetzen.

Wenn SIE Zeilen mit fehlenden Werten in einer bestimmten Spalte extrahieren möchten, verwenden SIE das Ergebnis von isnull() für diese Spalte.

print(df['point'].isnull())
# 0     True
# 1     True
# 2     True
# 3    False
# 4    False
# 5     True
# Name: point, dtype: bool

print(df[df['point'].isnull()])
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 1      NaN   NaN   NaN    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN
# 5    Frank  30.0   NaN    NaN    NaN

Das Konzept ist dasselbe, WENN Spalten mit fehlenden Werten in einer bestimmten Zeile extrahiert werden. Verwenden Sie loc[], um nach Name (Label) ausgewählt, und iloc[], um nach Position ausgewählt.

print(df.iloc[2].isnull())
# name     False
# age       True
# state    False
# point     True
# other     True
# Name: 2, dtype: bool

print(df.loc[:, df.iloc[2].isnull()])
#     age  point  other
# 0  24.0    NaN    NaN
# 1   NaN    NaN    NaN
# 2   NaN    NaN    NaN
# 3  68.0   70.0    NaN
# 4   NaN   88.0    NaN
# 5  30.0    NaN    NaN

Zeilen/Spalten mit mindestens einem fehlenden Wert extrahieren

Entfernen Sie als Beispiel Zeilen und Spalten, in denen alle Werte fehlende Werte sind.

df2 = df.dropna(how='all').dropna(how='all', axis=1)
print(df2)
#       name   age state  point
# 0    Alice  24.0    NY    NaN
# 2  Charlie   NaN    CA    NaN
# 3     Dave  68.0    TX   70.0
# 4    Ellen   NaN    CA   88.0
# 5    Frank  30.0   NaN    NaN

Verwenden Sie die Methode any(), die True zurückgibt, wenn in jeder Zeile/Spalte mindestens ein True vorhanden ist. Standardmäßig wird es auf Spalten angewendet. Wenn Achse = 1, WIRD SIE auf Zeilen angewendet.

Indem SIE any() aus dem Ergebnis von isnull() aufrufen, can SIE überprüfen, ob jede Zeile und Spalte mindestens einen fehlenden Wert enthält.

Zeilen extrahieren, die mindestens einen fehlenden Wert enthalten:

print(df2.isnull())
#     name    age  state  point
# 0  False  False  False   True
# 2  False   True  False   True
# 3  False  False  False  False
# 4  False   True  False  False
# 5  False  False   True   True

print(df2.isnull().any(axis=1))
# 0     True
# 2     True
# 3    False
# 4     True
# 5     True
# dtype: bool

print(df2[df2.isnull().any(axis=1)])
#       name   age state  point
# 0    Alice  24.0    NY    NaN
# 2  Charlie   NaN    CA    NaN
# 4    Ellen   NaN    CA   88.0
# 5    Frank  30.0   NaN    NaN

Spalten extrahieren, die mindestens einen fehlenden Wert enthalten:

print(df2.isnull().any())
# name     False
# age       True
# state     True
# point     True
# dtype: bool

print(df2.loc[:, df2.isnull().any()])
#     age state  point
# 0  24.0    NY    NaN
# 2   NaN    CA    NaN
# 3  68.0    TX   70.0
# 4   NaN    CA   88.0
# 5  30.0   NaN    NaN