Pandasデータフレームの各行の欠損値の数を数える方法は?


16

Pandasデータフレームの各行の欠損値の数を取得するにはどうすればよいですか。各行に同じ数の欠損値がある異なるデータフレームにデータフレームを分割したいと思います。

なにか提案を?

回答:


19

次のように行にカウントを適用できます。

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

完璧に働きました!THX。
Kaggle 16

39

パンダを使用する場合は、ループを含む、で実行する操作を回避しようとapplymapapplymap遅いですなど!

各列の欠損値をカウントする場合は、次のことを試してください。

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


4

または、データフレームオブジェクトのinfoメソッドを使用することもできます。

df.info()

これは、各列の非null値の数を提供します。


2

列に沿ったnull値

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

列に沿って空白の値、

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

行に沿ったnull値

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

行に沿って空白の値、

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


-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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.