回答:
次のように行にカウントを適用できます。
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
出力:
0: 3
1: 1
2: 0
次のように結果を列として追加できます。
test_df['full_count'] = test_df.apply(lambda x: x.count(), axis=1)
結果:
A B C full_count
0: 1 1 3 3
1: 2 nan nan 1
2: nan nan nan 0
パンダを使用する場合は、ループを含む、で実行する操作を回避しようとapply
、map
、applymap
遅いですなど!
各列の欠損値をカウントする場合は、次のことを試してください。
df.isnull().sum()
または df.isnull().sum(axis=0)
一方、次の方法で各行を数えることができます(これはあなたの質問です)。
df.isnull().sum(axis=1)
Jan van der Vegtのソリューションよりも約10倍高速です(ただし、欠損値ではなく有効な値をカウントします)。
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
このスニペットは、欠損値のある列の総数の整数値を返します。
(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