在大熊猫数据集的所有行中计算NaN列的有效方法?

时间:2019-09-17 23:34:39

标签: python pandas data-science

我目前使用以下方法计算整个数据集中缺少的列数:

missing_cols = X.apply(lambda x: x.shape[0] - x.dropna().shape[0], axis=1).value_counts().to_frame()

运行此命令时,RAM使用量急剧增加。在Kaggle中,足以使机器崩溃。在执行操作和gc.collect()之后,我似乎并没有收回所有内存,暗示某种泄漏。

Maxed out

我正试图了解缺少1列数据,2列数据,3列数据等的行数。

是否有更有效的方法来执行此计算?

2 个答案:

答案 0 :(得分:1)

要获得可以通过代码获得的输出,可以使用:

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

这是一个示例:

df=pd.DataFrame()
df['col1']=[np.nan,1,3,5,np.nan]
df['col2']=[2,np.nan,np.nan,3,6]
df['col3']=[1,3,np.nan,4,np.nan]
print(df)
print(df.isnull().sum(axis=1))
print(df.isnull().sum(axis=0))


   col1  col2  col3
0   NaN   2.0   1.0
1   1.0   NaN   3.0
2   3.0   NaN   NaN
3   5.0   3.0   4.0
4   NaN   6.0   NaN
0    1
1    1
2    2
3    0
4    2
dtype: int64
col1    2
col2    2
col3    2
dtype: int64

如您所见,您可以按行和按列获取NaN值的计数

现在在做

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

   0
2  2
1  2
0  1

答案 1 :(得分:0)

您可以使用以下方法逐行计算na个值:

df.isna().count(axis='rows')

如果这导致您的计算机崩溃,我建议逐块迭代。