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

使用Pandas按OverallQual均值填充SalePrice空值时apply函数报KeyError:nan

问题分析与修正方案

错误原因拆解

  • 逻辑错误:当SalePrice为空时,你错误地用空值SalePrice去索引分组后的均值序列sale_price_by_qual,但这个序列的索引是OverallQual的数值,根本不存在nan这个键,直接触发KeyError。正确逻辑应该用当前行的OverallQual值去取对应分组的平均售价。
  • 拼写/语法错误:
    • x['SalePrice] 缺少闭合单引号,应为x['SalePrice']
    • OverallQaul 拼写错误,正确列名是OverallQual
    • df[SalePrice] 列名未加引号,Python会把它当成变量而非列名,应为df['SalePrice']

修正后的代码

import numpy as np

# 先按OverallQual分组计算平均售价
sale_price_by_qual = df.groupby('OverallQual')['SalePrice'].mean()

def fill_sales_price(SalePrice, OverallQual):
    if np.isnan(SalePrice):
        # 用当前行的OverallQual取对应分组均值
        return sale_price_by_qual[OverallQual]
    else:
        return SalePrice

# 修正所有拼写和语法问题
df['SalePrice'] = df.apply(lambda x: fill_sales_price(x['SalePrice'], x['OverallQual']), axis=1)

更高效的替代方案

apply逐行处理效率较低,尤其面对大数据集时,推荐用map结合fillna的方式实现,代码更简洁且性能更好:

sale_price_by_qual = df.groupby('OverallQual')['SalePrice'].mean()
df['SalePrice'] = df['SalePrice'].fillna(df['OverallQual'].map(sale_price_by_qual))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:01:29