特征工程对Type列编码触发ValueError: Columns must be same length as key求助
问题根因
你报错的核心原因是 pd.get_dummies() 对单列处理后返回的是多列DataFrame,而你直接尝试把多列结果赋值给原数据框的单列df['Type'],左右维度不匹配触发报错。比如你的Type列如果有Free、Paid两个取值,pd.get_dummies(df['Type'])会返回2列的结果,你直接赋值给1个列必然失败。
修复方案
方案1:仅保留编码后的单列(适合二分类场景)
如果你的Type列仅包含2种取值,只需要保留1列独热编码结果即可直接赋值给原列:
# 取get_dummies返回结果的第一列赋值,drop_first=True还可以避免多重共线性问题 df['Type'] = pd.get_dummies(df['Type'], drop_first=True)
方案2:将多列编码结果合并到原数据集(适合多分类场景)
如果你的Type列有超过2种取值,参考你之前处理Category列的逻辑,用concat合并多列编码结果:
# 生成Type列的独热编码,列名前缀为type_ type_dummies = pd.get_dummies(df['Type'], prefix='type') # 合并到原数据集,同时删除原Type列避免冗余 df = pd.concat([df.drop('Type', axis=1), type_dummies], axis=1)
补充排查点
建议执行编码前先检查Type列的取值分布和空值情况,避免遗漏异常值导致编码结果不符合预期:
# 查看Type列的所有取值及计数,包含空值 print(df['Type'].value_counts(dropna=False))
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

