使用SimpleImputer填充np.nan后DataFrame仍存在缺失值是什么原因
错误原因与修复方案
SimpleImputer的fit_transform()方法仅返回填充完成后的新数组,不会修改传入的原始DataFrame对象。你当前代码没有将填充结果赋值回df变量,后续调用msno.matrix(df)可视化的仍是未处理的原始数据,所以会看到缺失值未被替换。
修正后的完整代码如下:
from sklearn.impute import SimpleImputer import missingno as msno import numpy as np import pandas as pd # 初始化填充器 imp = SimpleImputer(missing_values=np.nan, strategy='most_frequent') # 将填充结果转回DataFrame,保留原始列名与索引 df = pd.DataFrame(imp.fit_transform(df), columns=df.columns, index=df.index) # 可视化处理后的数据 msno.matrix(df)
其他可能导致缺失值未被填充的原因:
- 数据中存在非
np.nan格式的缺失标记,比如空字符串''、字符串形式的'NaN'/'nan'、None等,这些值不会被配置为missing_values=np.nan的填充器识别,需要先统一转换为np.nan再执行填充操作:
# 统一替换所有常见缺失标记为np.nan df = df.replace(['', 'NaN', 'nan', 'None', None], np.nan)
- 若存在整行全部为空的记录,可额外添加删除全空行的逻辑:
# 删除全为空值的行 df = df.dropna(how='all')
内容的提问来源于stack exchange,提问作者Ruslan Pylypyyuk
相关产品推荐
相关产品推荐

