You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Scikit-Learn的SimpleImputer填补DataFrame指定列缺失值

问题代码错误点及修正方案
  • 错误1:多列选取语法错误
    pandas选取多列需要传入由列名组成的列表,正确写法是df[["a", "b", "e"]],原代码df["a", "b", "e"]会被识别为传入单个元组作为列名,触发KeyError。
  • 错误2:缺失值标识配置错误
    pandas读取数据后默认缺失值为np.nan(浮点数类型的空值),不是字符串'NaN',原代码missing_values='NaN'无法识别实际的空值,需要改为missing_values=np.nan,或者直接省略该参数(SimpleImputer默认值就是np.nan)。如果读取数据时没有自动把字符串'NA'转为空值,可以在pd.read_csv时添加na_values='NA'参数,或者将missing_values参数设置为'NA'。
  • 错误3:已废弃参数使用错误
    scikit-learn v0.22版本之后,SimpleImputer已经移除axis参数,默认自动按列计算统计值填补,保留axis=0会触发警告甚至报错,直接删除该参数即可。
  • 错误4:拟合与转换的数据维度不匹配
    fit阶段只用了a/b/e三列数据训练填补器,transform阶段却传入完整DataFrame的所有列(包含c/d两个非数值列,且列数和拟合阶段不一致),会触发维度不匹配错误,transform阶段也需要传入对应三列数据。
修正后的完整代码
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

# 此处为样例数据生成代码,你实际使用时替换为自己的df读取逻辑即可
df = pd.DataFrame({
    'a': [np.nan,5,7,np.nan,4],
    'b': [39,np.nan,53,np.nan,24],
    'c': ['cat','dog','cat','cat','dog'],
    'd': ['gray','brown','tan','black','tan'],
    'e': [20,np.nan,33,41,np.nan]
})

# 初始化均值填补器
miss_mean_imputer = SimpleImputer(strategy='mean')

# 仅对需要填补的三列执行拟合+转换
imputed_cols = miss_mean_imputer.fit_transform(df[["a", "b", "e"]])

# 将填补后的数值赋值回原DataFrame对应列,保留其他原列数据
df[["a", "b", "e"]] = imputed_cols

print(df)

内容的提问来源于stack exchange,提问作者user15697038

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:45:00