我目前使用以下方法计算整个数据集中缺少的列数:
missing_cols = X.apply(lambda x: x.shape[0] - x.dropna().shape[0], axis=1).value_counts().to_frame()
运行此命令时,RAM使用量急剧增加。在Kaggle中,足以使机器崩溃。在执行操作和gc.collect()
之后,我似乎并没有收回所有内存,暗示某种泄漏。
我正试图了解缺少1列数据,2列数据,3列数据等的行数。
是否有更有效的方法来执行此计算?
答案 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')
如果这导致您的计算机崩溃,我建议逐块迭代。