HOWTO · Pandas

Überprüfen Sie, ob eine Zelle in Pandas leer ist

Dieses Tutorial beschreibt, wie Sie überprüfen, ob eine Zelle in einem Pandas-Datenrahmen leer ist.

Auf dieser Seite

Pandas-Prüfungen erkennen Werte, die die Bibliothek als fehlend einstuft. Nicht jeder Wert, der leer aussieht, gilt als fehlend: NaN, None und NaT sind Beispiele für Darstellungen fehlender Werte, während eine leere Zeichenfolge ("") ein gewöhnlicher String bleibt, sofern Sie sie nicht ausdrücklich umwandeln. Dieser Unterschied ist wichtig, wenn importierte Daten leeren Text als Platzhalter für fehlende Informationen verwenden.

Verstehen, was in Pandas als fehlend gilt

Verwenden Sie isna() oder dessen Alias isnull(), um eine boolesche Maske zu erstellen: True kennzeichnet einen erkannten fehlenden Wert, False einen vorhandenen Wert. Dieselbe Operation funktioniert mit einem Skalar, einer Series (einer Spalte) oder einem DataFrame. Die Maske behält die Form und Beschriftungen des geprüften Objekts bei.

Die folgenden Beispiele verwenden None, um fehlende Einträge zu erzeugen. Die bereitgestellten Ausführungsnachweise enthalten Ausgaben für alle vier ausführbaren Python-Beispiele.

Eine einzelne Zelle oder Spalte mit isna() oder isnull() prüfen

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import pandas as pd

df = pd.DataFrame({"name": ["Ari", "Bo", "Cy"], "score": [8, None, 6]}, index=[10, 11, 12])
cell_missing = pd.isna(df.loc[11, "score"])
column_mask = df["score"].isna()
print(cell_missing)
print(column_mask.tolist())

loc wählt anhand der Zeilen- und Spaltenbeschriftungen aus. df.loc[11, "score"] prüft daher die Zelle mit dem Zeilenlabel 11. Für eine Auswahl nach Position verwenden Sie iloc, zum Beispiel df.iloc[1, 1]. Bei einem DataFrame mit einem benutzerdefinierten Index können sich Zeilenlabel und Zeilenposition unterscheiden. isna() und isnull() sind gleichwertige Aliase; verwenden Sie einen der beiden Namen konsequent. Die Pandas-Dokumentation zu isnull() beschreibt dieselbe Prüfung auf fehlende Werte.

Für eine ganze Spalte gibt df["score"].isna() pro Zeile einen booleschen Wert zurück. Für einen ganzen DataFrame liefert df.isna() einen booleschen DataFrame mit denselben Zeilen- und Spaltenbeschriftungen. Mit diesen Masken können Sie Ergebnisse untersuchen oder passende Zeilen auswählen, etwa mit df.loc[df["score"].isna()].

Mit any() prüfen, ob fehlende Werte vorhanden sind

Wenden Sie any() auf die Maske einer Spalte an, um eine boolesche Antwort für diese Spalte zu erhalten. Bei einem DataFrame liefert df.isna().any() eine boolesche Series mit einem Ergebnis pro Spalte. Wenden Sie ein weiteres any() auf diese Series an, um zu prüfen, ob irgendeine Spalte einen fehlenden Wert enthält:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import pandas as pd

df = pd.DataFrame({"name": ["Ari", "Bo", "Cy"], "score": [8, None, 6]})
missing_by_column = df.isna().any()
missing_anywhere = missing_by_column.any()
print(missing_by_column.to_dict())
print(missing_anywhere)

Die Python-Funktion any() gibt True zurück, wenn mindestens ein Element wahr ist. Ein Aufruf mit einer DataFrame-Maske liefert ein Ergebnis pro Spalte; ein weiterer Aufruf auf diesem Ergebnis fasst die Antwort für den gesamten DataFrame zu einem einzelnen Wert zusammen.

Fehlende Werte mit sum() zählen

Beim Addieren zählen boolesche Werte True als 1 und False als 0. Daher ergibt die Summe einer Maske fehlender Werte deren Anzahl. Addieren Sie die Maske einer Series, um die Anzahl für eine Spalte zu erhalten, oder die Maske eines DataFrames, um die Anzahl pro Spalte zu berechnen. Eine zweite Summierung liefert die Gesamtzahl über alle Zellen hinweg:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import pandas as pd

df = pd.DataFrame({"name": ["Ari", "Bo", "Cy"], "score": [8, None, 6]})
counts_by_column = df.isna().sum()
total_missing = counts_by_column.sum()
print(counts_by_column.to_dict())
print(total_missing)

Gezählt werden nur Werte, die Pandas als fehlend erkennt. Sollen leere Zeichenfolgen in einer importierten Spalte ebenfalls mitzählen, normalisieren Sie die Werte zuerst, indem Sie beispielsweise "" durch None ersetzen, und erstellen Sie anschließend die Maske.

Zeilenlabels fehlender Werte finden

Verwenden Sie die boolesche Maske, um den Index der Series an den Stellen auszuwählen, an denen ein Wert fehlt. Die zurückgegebenen Werte sind Zeilenlabels, keine Zeilenpositionen:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import pandas as pd

df = pd.DataFrame({"score": [8, None, 6, None]}, index=[10, 11, 12, 13])
missing_row_labels = df.index[df["score"].isna()].tolist()
print(missing_row_labels)

Für allgemeine Pandas-Daten verarbeitet dieser Ansatz mit einer Maske die von Pandas erkannten Darstellungen fehlender Werte. numpy.isnan ist eingeschränkter: Es prüft NaN-Werte in kompatiblen numerischen Daten und akzeptiert möglicherweise keine Werte wie None oder NaT. Verwenden Sie bevorzugt isna(), wenn die Werte der Spalte unterschiedliche Darstellungen fehlender Werte haben können. Nutzen Sie numpy.isnan nur, wenn Datentyp und Werte für diese Funktion geeignet sind.