▷ pandas: Fehlende Werte (NaN) mit dropna() entfernen | PythonSeminar (2024)

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 pddf = 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.0print(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 NaNprint(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 NaNprint(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: float64print(s.dropna())# 0 24.0# 3 68.0# 5 30.0# Name: age, dtype: float64s.dropna(inplace=True)print(s)# 0 24.0# 3 68.0# 5 30.0# Name: age, dtype: float64
▷ pandas: Fehlende Werte (NaN) mit dropna() entfernen | PythonSeminar (2024)

References

Top Articles
Latest Posts
Article information

Author: Carmelo Roob

Last Updated:

Views: 6249

Rating: 4.4 / 5 (65 voted)

Reviews: 80% of readers found this page helpful

Author information

Name: Carmelo Roob

Birthday: 1995-01-09

Address: Apt. 915 481 Sipes Cliff, New Gonzalobury, CO 80176

Phone: +6773780339780

Job: Sales Executive

Hobby: Gaming, Jogging, Rugby, Video gaming, Handball, Ice skating, Web surfing

Introduction: My name is Carmelo Roob, I am a modern, handsome, delightful, comfortable, attractive, vast, good person who loves writing and wants to share my knowledge and understanding with you.