pd.DataFrame.eq()未达预期:艾姆斯爱荷华住房数据集空值排查异常
问题解决办法
你的问题出在对pandas string dtype缺失值的判断逻辑上:
- pandas的string类型列中,真正的缺失值是
pd.NA,不是字符串形式的'NA',你原代码用.eq('NA')是在查找值等于字符串'NA'的行,而非识别缺失值。 - 替换空字符串为
None后,None在string dtype列中会被转为pd.NA,但你依然用.eq('NA')查找,自然还是找不到。
修正后的代码
直接用.isna()来识别缺失值即可:
(data .select_dtypes('string') .isna() .mean(axis='rows') .mul(100) .pipe(lambda ser: ser[ser > 0]) )
额外情况处理
如果你的数据集里确实存在用字符串'NA'表示的缺失值(而非pandas原生缺失值),可以先将这类字符串转为pd.NA再统计:
# 先统一转换字符串形式的缺失值 string_cols = data.select_dtypes('string') data[string_cols.columns] = string_cols.replace('NA', pd.NA) # 再计算缺失率 (data .select_dtypes('string') .isna() .mean(axis='rows') .mul(100) .pipe(lambda ser: ser[ser > 0]) )
内容的提问来源于stack exchange,提问作者Sam1921
相关产品推荐
相关产品推荐

