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

如何用另一列均值填充DataFrame列缺失值?遇['MSSubCLass']索引错误

问题解决:['MSSubCLass'] not in index 错误及均值填充优化

错误核心原因

出现['MSSubCLass'] not in index的本质是列名不匹配:

  • 检查你的train_df实际列名,大概率存在拼写误差(比如数据中列名是MSSubClass,但代码里写成了MSSubCLass,注意字母大小写或顺序差异)。
  • 可通过print(train_df.columns)输出所有列名,对比确认是否和代码中引用的列名完全一致,也需排查列名是否带有多余空格。

修复及优化填充方案

方案1:修正列名后复用原逻辑

如果确认列名拼写错误,修正后直接运行你的原代码即可。但硬编码均值的方式维护性差,推荐采用更灵活的自动分组填充方案:

方案2:自动计算分组均值填充(推荐)

无需手动写每个类别的均值,直接通过分组计算后填充,代码简洁且不易出错:

import pandas as pd

# 计算每个MSSubCLass对应的LotFrontage均值(可按需保留小数位数)
class_mean = train_df.groupby('MSSubCLass')['LotFrontage'].mean().round()

# 填充缺失值:用对应类别的均值替换空值
train_df['LotFrontage'] = train_df.apply(
    lambda row: class_mean[row['MSSubCLass']] if pd.isnull(row['LotFrontage']) else row['LotFrontage'],
    axis=1
)

方案3:用transform实现高效填充(进阶)

pandas的transform方法可避免循环,更高效完成分组填充:

train_df['LotFrontage'] = train_df.groupby('MSSubCLass')['LotFrontage'].transform(
    lambda x: x.fillna(x.mean().round())
)

注意事项

  • 填充前需确认MSSubCLass列无缺失值,可通过train_df['MSSubCLass'].isnull().sum()检查,否则分组会遗漏对应行。
  • 若不需要取整,可去掉round()保留原始均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:05:16