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。