Wie kann die Anzahl der fehlenden Werte in jeder Zeile im Pandas-Datenrahmen gezählt werden?


16

Wie kann ich die Anzahl der fehlenden Werte in jeder Zeile im Pandas-Datenrahmen ermitteln? Ich möchte den Datenrahmen in verschiedene Datenrahmen aufteilen, die in jeder Zeile die gleiche Anzahl fehlender Werte aufweisen.

Irgendein Vorschlag?

Antworten:


19

Sie können die Zeilen wie folgt zählen:

test_df.apply(lambda x: x.count(), axis=1)

test_df:

    A   B   C
0:  1   1   3
1:  2   nan nan
2:  nan nan nan

Ausgabe:

0:  3
1:  1
2:  0

Sie können das Ergebnis wie folgt hinzufügen:

test_df['full_count'] = test_df.apply(lambda x: x.count(), axis=1)

Ergebnis:

    A   B   C   full_count
0:  1   1   3   3
1:  2   nan nan 1
2:  nan nan nan 0

Hat perfekt funktioniert! Danke.
Kaggle

36

Wenn Pandas verwenden, versuchen Sie das Ausführen von Operationen in einer Schleife zu vermeiden, einschließlich apply, map, applymapetc. Das ist langsam!

Wenn Sie die fehlenden Werte in jeder Spalte zählen möchten, versuchen Sie:

df.isnull().sum() oder df.isnull().sum(axis=0)

Auf der anderen Seite können Sie in jeder Zeile (was Ihre Frage ist) zählen durch:

df.isnull().sum(axis=1)

Es ist ungefähr zehnmal schneller als die Lösung von Jan van der Vegt (übrigens zählt er gültige Werte anstatt fehlende Werte):

In [18]: %timeit -n 1000 df.apply(lambda x: x.count(), axis=1)
1000 loops, best of 3: 3.31 ms per loop

In [19]: %timeit -n 1000 df.isnull().sum(axis=1)
1000 loops, best of 3: 329 µs per loop


4

Sie können auch einfach die Info-Methode für Datenrahmenobjekte verwenden:

df.info()

Dies gibt die Anzahl der Nicht-Null-Werte für jede Spalte an.


1

Nullwerte entlang der Spalte,

df.isnull().sum(axis=0)

leere Werte entlang der Spalte,

c = (df == '').sum(axis=0)

Nullwerte entlang der Zeile,

df.isnull().sum(axis=1)

leere Werte entlang der Zeile,

c = (df == '').sum(axis=1)

0
>>> df = pd.DataFrame([[1, 2, np.nan],
...                    [np.nan, 3, 4],
...                    [1, 2,      3]])

>>> df
    0  1   2
0   1  2 NaN
1 NaN  3   4
2   1  2   3

>>> df.count(axis=1)
0    2
1    2
2    3
dtype: int64

0

Wenn Sie die Anzahl der fehlenden Werte zählen möchten:

np.logical_not(df.isnull()).sum()

0

Dieses Snippet gibt einen ganzzahligen Wert der Gesamtzahl der Spalten mit fehlendem Wert zurück:

(df.isnull().sum() > 0).astype(np.int64).sum()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.