Jak policzyć liczbę brakujących wartości w każdym wierszu w ramce danych Pandas?


17

Jak mogę uzyskać liczbę brakujących wartości w każdym wierszu w ramce danych Pandas. Chciałbym podzielić ramkę danych na różne ramki danych, które mają taką samą liczbę brakujących wartości w każdym wierszu.

Jakieś sugestie?

Odpowiedzi:


19

Możesz zastosować liczenie do wierszy w ten sposób:

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

wynik:

0:  3
1:  1
2:  0

Możesz dodać wynik jako kolumnę taką jak ta:

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

Wynik:

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

Działa idealnie! Dzięki.
Kaggle,

40

Podczas korzystania z pandy, starają się unikać przeprowadzenie operacji w pętli, w tym apply, map, applymapitp to jest wolna!

Jeśli chcesz policzyć brakujące wartości w każdej kolumnie, spróbuj:

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

Z drugiej strony możesz liczyć w każdym rzędzie (co jest twoim pytaniem) przez:

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

Jest to około 10 razy szybsze niż rozwiązanie Jana van der Vegta (BTW liczy prawidłowe wartości, a nie wartości brakujące):

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

Lub możesz po prostu skorzystać z metody info dla obiektów ramki danych:

df.info()

która zapewnia liczbę wartości innych niż null dla każdej kolumny.


2

wartości zerowe wzdłuż kolumny,

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

puste wartości wzdłuż kolumny,

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

wartości zerowe wzdłuż wiersza,

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

puste wartości wzdłuż rzędu,

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

0

Ten fragment zwróci wartość całkowitą całkowitej liczby kolumn z brakującą wartością:

(df.isnull().sum() > 0).astype(np.int64).sum()

-1
>>> 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

-1

Jeśli chcesz policzyć brakujące wartości:

np.logical_not(df.isnull()).sum()
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.