我如何在熊猫数据框架中的每一行中获取缺少值的数量。我想将数据框架拆分为不同的数据框,这些数据框中每行中具有相同数量的丢失值。

有建议吗?

有帮助吗?

解决方案

您可以对这样的行应用计数:

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)
许可以下: CC-BY-SA归因
scroll top