如何计算Pandas数据框中每一行的缺失值数量?


17

如何获取Pandas数据框中每一行的缺失值数量。我想将数据框拆分为不同的数据框,每行中缺失值的数量相同。

有什么建议吗?

Answers:


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

工作完美!谢谢。
Kaggle

40

当使用熊猫,尽量避免在一个循环中,包括执行操作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



2

列中的空值,

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

列中的空白值,

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

行中的值为空,

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

-1

如果要计算缺失值:

np.logical_not(df.isnull()).sum()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.