Answers:
您可以像这样对行进行计数:
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
或者,您可以简单地对数据框对象使用info方法:
df.info()
它为每列提供非空值的计数。
列中的空值,
df.isnull().sum(axis=0)
列中的空白值,
c = (df == '').sum(axis=0)
行中的值为空,
df.isnull().sum(axis=1)
行中的空白值,
c = (df == '').sum(axis=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