模型构建报错: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
相关产品推荐
相关产品推荐

