
Sie können fehlende Werte (NaN) aus pandas.DataFrame, Series mit dropna() entfernen.
Dieser Artikel hat folgenden Inhalt.
- Zeilen/Spalten entfernen, in denen allen Elementen Werte fehlen:
how='all'
- Zeilen/Spalten entfernen, die mindestens einen fehlenden Wert enthalten:
how='any' (default)
- Zeilen/Spalten entsprechend der Anzahl der nicht fehlenden Werte entfernen:
thresh
- Statistisch auf bestimmte Zeilen/Spalten entfernen:
subset
- An Ort und Stelle operieren:
inplace
- Für Pandas.Serie
Wenn SIE Zeilen und Spalten mit fehlenden Werten extrahieren möchten, lesen Sie den following Artikel.
Informationen zum Ersetzen und Zählen fehlender Werte FINDEN SIE in den following Artikeln.
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
Zeilen/Spalten entfernen, in denen allen Elementen Werte fehlen:how='all'
Durch Setzen von how=’all‘ Werden Zeilen entfernt, in denen allen Elementen Werte fehlen.
print(df.dropna(how='all'))
# name age state point other
# 0 Alice 24.0 NY 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
If die Achse auf 1 oder „Spalten“ eingestellt IST, Werden Spalten entfernt, in denen für alle Elemente Werte fehlen.
print(df.dropna(how='all', axis=1))
# name age state point
# 0 Alice 24.0 NY NaN
# 1 NaN NaN NaN 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
Beachten Sie, dass Zeilen entfernt werden, wenn die Achse auf 0 oder „Index“ gesetzt ist. Da der Standardwert von Achse 0 ist, Werden Zeilen entfernt, wenn sie weggelassen Werden, wie im ersten Beispiel gezeigt.
In verschiedenen Versionen wurden sowohl Zeilen als auch Spalten mit Achse = [0, 1] entfernt, aber seit Version 1.0.0 kann die Achse nicht mehr mit einer Liste oder einem Tupel angegeben werden.
Wenn Sie sowohl Zeilen als auch Spalten entfernen möchten, können Sie dropna() wiederholt anwenden.
# print(df.dropna(how='all', axis=[0, 1]))
# TypeError: supplying multiple axes to axis is no longer supported.
print(df.dropna(how='all').dropna(how='all', axis=1))
# 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
Zeilen/Spalten entfernen, die mindestens einen fehlenden Wert enthalten:how='any' (default)
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
Durch Setzen von how=’any‘ Werden Zeilen entfernt, sterben mindestens einen fehlenden Wert enthalten. Da der Standardwert von how ‚any‘ ist, ist das Ergebnis dasselbe, auch wenn es weggelassen WIRD.
print(df2.dropna(how='any'))
# name age state point
# 3 Dave 68.0 TX 70.0
print(df2.dropna())
# name age state point
# 3 Dave 68.0 TX 70.0
If die Achse auf 1 oder „Spalten“ gesetzt IST, Werden Spalten entfernt, sterben mindestens einen fehlenden Wert enthalten.
print(df2.dropna(axis=1))
# name
# 0 Alice
# 2 Charlie
# 3 Dave
# 4 Ellen
# 5 Frank
Zeilen/Spalten entsprechend der Anzahl der nicht fehlenden Werte entfernen:thresh
Mit dem Argument thresh can SIE Zeilen und Spalten entsprechend der Anzahl nicht fehlender Werte entfernen.
If beispielsweise thresh=3, bleiben die Zeilen, die mehr als drei nicht fehlende Werte enthalten, übrig, und die anderen Zeilen werden entfernt.
print(df.dropna(thresh=3))
# name age state point other
# 0 Alice 24.0 NY NaN NaN
# 3 Dave 68.0 TX 70.0 NaN
# 4 Ellen NaN CA 88.0 NaN
If Achse auf 1 oder ‚Spalten‘ gesetzt IST, Werden Spalten entfernt.
print(df.dropna(thresh=3, axis=1))
# name age state
# 0 Alice 24.0 NY
# 1 NaN NaN NaN
# 2 Charlie NaN CA
# 3 Dave 68.0 TX
# 4 Ellen NaN CA
# 5 Frank 30.0 NaN
Statistisch auf bestimmte Zeilen/Spalten entfernen:subset
Wenn SIE basierend auf bestimmten Zeilen und Spalten entfernen möchten, geben Sie eine Liste von Zeilen-/Spaltenbeschriftungen (Namen) für das Subset-Argument von dropna() an. Auch wenn SIE nur ein Label festlegen möchten, müssen SIE es als Liste angeben, z. B. subset=[’name‘].
Da der Standardwert how=’any‘ und axis=0 ist, werden Zeilen mit fehlenden Werten in den durch subset angegebenen Spalten entfernt.
print(df.dropna(subset=['age']))
# name age state point other
# 0 Alice 24.0 NY NaN NaN
# 3 Dave 68.0 TX 70.0 NaN
# 5 Frank 30.0 NaN NaN NaN
print(df.dropna(subset=['age', 'state']))
# name age state point other
# 0 Alice 24.0 NY NaN NaN
# 3 Dave 68.0 TX 70.0 NaN
If how auf ‚all‘ gesetzt IST, Werden Zeilen mit fehlenden Werten in allen angegebenen Spalten entfernt.
print(df.dropna(subset=['age', 'state'], how='all'))
# name age state point other
# 0 Alice 24.0 NY 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
If Achse auf 1 oder ‚Spalten‘ gesetzt IST, Werden Spalten entfernt.
print(df.dropna(subset=[0, 4], axis=1))
# name state
# 0 Alice NY
# 1 NaN NaN
# 2 Charlie CA
# 3 Dave TX
# 4 Ellen CA
# 5 Frank NaN
print(df.dropna(subset=[0, 4], axis=1, how='all'))
# name age state point
# 0 Alice 24.0 NY NaN
# 1 NaN NaN NaN 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
Ein Fehler wird ausgelöst, wenn ein nicht vorhandener Zeilen- oder Spaltenname angegeben wird. Ein Fehler wird auch ausgelöst, wenn Sie Achse=1 setzen, aber Spaltennamen angeben oder Achse=0 (Standard) setzen, aber Zeilennamen angeben.
# print(df.dropna(subset=['age', 'state', 'xxx']))
# KeyError: ['xxx']
# print(df.dropna(subset=['age', 'state'], axis=1))
# KeyError: ['age', 'state']
An Ort und Stelle operieren:inplace
Wie in den Beispielen gezeigt, wird standardmäßig ein neues Objekt zurückgesetzt, und das ursprüngliche Objekt wird nicht geändert, aber wenn inplace=True, wird das ursprüngliche Objekt selbst aktualisiert.
df.dropna(subset=['age'], inplace=True)
print(df)
# name age state point other
# 0 Alice 24.0 NY NaN NaN
# 3 Dave 68.0 TX 70.0 NaN
# 5 Frank 30.0 NaN NaN NaN
Für Pandas.Serie
Das einzige gültige Argument für dropna() von pandas.Series ist vorhanden. Da es sich um eindimensionale Daten handelt, werden die Elemente mit fehlenden Werten einfach entfernt.
s = pd.read_csv('data/src/sample_pandas_normal_nan.csv')['age']
print(s)
# 0 24.0
# 1 NaN
# 2 NaN
# 3 68.0
# 4 NaN
# 5 30.0
# Name: age, dtype: float64
print(s.dropna())
# 0 24.0
# 3 68.0
# 5 30.0
# Name: age, dtype: float64
s.dropna(inplace=True)
print(s)
# 0 24.0
# 3 68.0
# 5 30.0
# Name: age, dtype: float64