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

模型构建报错:KeyError 'award' 问题排查求助

解决KeyError: 'award'的问题

嘿,我马上帮你搞清楚这个报错的原因,以及怎么修复~

问题根源

你遇到的KeyError本质是执行pd.get_dummies()的顺序错了!

pd.get_dummies()的作用是把分类列(比如你的award列,包含Best Director、Best Actor这类离散值)转换成多个独热编码列,而且会自动移除原来的分类列。你先执行了独热编码,此时原来的award列已经被拆成了award_Best Actor、award_Best Director这类列,再去subset['award']自然找不到这个键啦。

看你给出的列名对比:

  • 执行pd.get_dummies()前:有award列
  • 执行后:只有award_Best Actor这类拆分后的列,原award列消失

最优解决方案:调整执行顺序

最直接的修复方式是先提取标签,再对剩余数据做独热编码,逻辑清晰还不容易出错:

# 第一步:先提取待预测的award标签,此时award列还存在
labels = np.array(subset['award'])
# 第二步:从子集中移除award标签列
subset_no_label = subset.drop('award', axis=1)
# 第三步:对移除标签后的子集做独热编码
subset = pd.get_dummies(subset_no_label)
# 后续步骤保持不变
subset_list = list(subset.columns)
subset = np.array(subset)

备选方案:从独热编码列还原标签(不推荐)

如果一定要先做独热编码,你可以从生成的独热列里还原award标签,但操作相对繁琐,而且容易出错:

# 先执行独热编码
subset = pd.get_dummies(subset)
# 精准筛选出所有award拆分后的列(用startswith避免把year_of_award、award_age这类无关列算进来)
award_cols = [col for col in subset.columns if col.startswith('award_')]
# 还原标签:找到每行值为1的award列,去掉前缀'award_'得到原始奖项名称
labels = subset[award_cols].idxmax(axis=1).str.replace('award_', '')
# 移除这些award独热列
subset = subset.drop(award_cols, axis=1)
# 后续步骤
subset_list = list(subset.columns)
subset = np.array(subset)

小提醒

你之前用'award' in col筛选列时,会把year_of_award、award_age这类包含award字符串但不是奖项的列也选进来,这也是为什么你替换后还是报错的原因——这些列根本不是你要的标签列,用startswith('award_')才能精准匹配到奖项的独热编码列哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:50:36