Odpowiedzi:
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
Podczas korzystania z pandy, starają się unikać przeprowadzenie operacji w pętli, w tym apply
, map
, applymap
itp 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
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.
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)
Ten fragment zwróci wartość całkowitą całkowitej liczby kolumn z brakującą wartością:
(df.isnull().sum() > 0).astype(np.int64).sum()
>>> 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