Python数据清洗:np.mean(df[col].isnull())的运行机制解析
问题:理解Python中计算DataFrame列空值占比的两种代码逻辑
在Python数据清洗项目中,我遇到了如下代码:
# let's see if there is any missing data for col in df.columns: pct_missing = np.mean(df[col].isnull()) print('{} - {}%'.format(col, round(pct_missing,2)))
这段代码可正常输出DataFrame各列的空值占比,但我对其运行机制存在疑惑:遍历DataFrame的每一列后,np.mean(df[col].isnull())计算的究竟是什么?是各列中空值单元格数量的均值吗?
作为参考,我自己用以下代码实现了相同效果:
NullValues=df.isnull().sum()/len(df) print('{} - {}%'.format(col, round(NullValues,2)))
两者结果基本一致,我想理解第一段代码的运行机制。
代码运行机制解析
第一段代码的分步逻辑
df[col].isnull():针对当前列的每个单元格做空值判断,空值返回布尔值True,非空返回False。在Python的数值计算语境中,True会被当作1处理,False会被当作0处理,所以这一步会生成一个由0和1组成的Series,其中1对应空值位置。np.mean():计算上述Series的平均值。由于平均值的计算公式是「总和 ÷ 元素数量」,这里的总和就是该列的空值总数,元素数量就是该列的总行数,所以最终得到的就是该列空值占总单元格数的比例,和你写的代码逻辑完全等价。
两种代码的逻辑等价性
你的代码是先通过df.isnull().sum()统计每列的空值总数,再除以总行数len(df)得到占比,属于「先求和再求比例」的思路;而第一段代码是把空值标记为1后直接求均值,本质上均值的计算就是「总和 ÷ 数量」,所以两者的计算结果完全一致。
内容的提问来源于stack exchange,提问作者S. R.
相关产品推荐
相关产品推荐

