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

基于pivot table填充GarageYrBlt缺失值报KeyError如何解决

报错原因
  • 访问逻辑写错了:pivot1是带两列的DataFrame,pivot1[x]这种写法是拿x当列名取整列数据,不是按YearBuilt的值找对应的GarageYrBlt。你传进去的x是房屋建造年份的具体数值,pandas去列名里找这个数值对应的列,找不到就直接抛KeyError。
  • 有个隐藏的逻辑bug:你判断缺失值用的是df表的GarageYrBlt字段,后面赋值操作的是df_test表,要是这俩表不是完全一样的同一份数据,就算不报错也会填错位。
  • 映射表结构不对:现在pivot1里的YearBuilt只是普通列,没设成查找用的索引,没法直接通过年份值匹配对应结果。
修正方法

不要用apply套lambda,先把透视表转成「建造年份:对应车库建造年份」的键值对映射,再用pandas自带的map方法匹配,效率高还不容易错:

  1. 先修正空值判断逻辑,不要跨表取掩码:
# 要填充哪个表,就从哪个表生成缺失值掩码
missing = df_test['GarageYrBlt'].isnull()
  1. 把透视表转成可直接查找的映射字典:
# 把YearBuilt设为索引,提取GarageYrBlt列转成字典
garage_map = pivot1.set_index('YearBuilt')['GarageYrBlt'].to_dict()
  1. 执行填充:
df_test.loc[missing, 'GarageYrBlt'] = df_test.loc[missing, 'YearBuilt'].map(garage_map)

补充:如果跑完上面的代码还有少量缺失,说明这部分行的YearBuilt在你做的透视表里没匹配到对应值,这种场景下常规处理是直接用房屋建造年份YearBuilt填充(绝大多数住宅的车库都是和房屋同期建造的):

df_test['GarageYrBlt'] = df_test['GarageYrBlt'].fillna(df_test['YearBuilt'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:33:34