如何计算PANDAS DataFrame中每一行中缺少值的数量?
题
我如何在熊猫数据框架中的每一行中获取缺少值的数量。我想将数据框架拆分为不同的数据框,这些数据框中每行中具有相同数量的丢失值。
有建议吗?
解决方案
您可以对这样的行应用计数:
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倍(BTW他计算有效值,而不是缺少值):
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(axis=1)
或者,您可以简单地使用数据框对象的信息方法:
df.info()
它提供了每列的非零值计数。
>>> 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
如果您想计数缺失值:
np.logical_not(df.isnull()).sum()
沿列的零值,
df.isnull().sum(axis=0)
沿列的空白值,
c = (df == '').sum(axis=0)
沿行零值,
df.isnull().sum(axis=1)
沿行的空白值,
c = (df == '').sum(axis=1)