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

Python 在大数据集的所有行中计算NaN列的有效方法?,python,pandas,data-science,Python,Pandas,Data Science,我目前正在使用以下方法计算整个数据集中缺少的列数: missing_cols = X.apply(lambda x: x.shape[0] - x.dropna().shape[0], axis=1).value_counts().to_frame() 当我运行这个程序时,我的RAM使用量急剧增加。在卡格尔,这足以使机器崩溃。在操作和一个gc.collect()之后,我似乎没有收回所有内存,暗示有某种泄漏 我试图了解缺少1列数据、2列数据、3列数据的行数,等等 有没有更有效的方法来执行此计算

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

missing_cols = X.apply(lambda x: x.shape[0] - x.dropna().shape[0], axis=1).value_counts().to_frame()
当我运行这个程序时,我的RAM使用量急剧增加。在卡格尔,这足以使机器崩溃。在操作和一个
gc.collect()
之后,我似乎没有收回所有内存,暗示有某种泄漏

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


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

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

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

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

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

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

列中的所有值都是nan?还是要按行计算NaN值?@lostCode最后,我将生成一个条形图--%的数据集缺少1列(在任何列上都可以找到空值),%的数据集缺少2列,最多%的数据集缺少所有列。因此,我试图生成一个表大小的
len(X.columns)
和一个值,该值表示缺少许多列数据的行数。我用iloc草拟了一个解决方案,但速度慢得离谱。使用iterrows查看数据集似乎会更快地耗尽内存。非常好!我从一个非常类似的函数开始,但我使用了一个
.apply
,这就是问题所在,它炸毁了RAM。