使用pd.get_dummies做独热编码仅返回0和1,是使用方法错误吗?
问题原因排查与解决
你对pd.get_dummies的基础使用方法没有错误,出现仅返回0、1两个值的情况可按以下优先级排查:
- 首先确认源列的唯一值数量是否符合预期,执行以下代码验证:
如果输出的唯一值数量为2,说明问题出在源数据处理环节:你在之前的代码中意外修改了Name列的取值,导致原本的8种类型被覆盖为仅2种取值,需要回溯前面的数据清洗、赋值逻辑修正问题。# 查看Name列的唯一值数量 print(test_data['Name'].nunique()) # 打印所有唯一值 print(test_data['Name'].unique()) - 如果源列唯一值数量确实为8,大概率是pandas的默认显示设置导致的误解:当DataFrame列数较多时,pandas会自动折叠隐藏中间列,仅展示首尾部分内容,你误以为仅返回了0/1值。执行以下代码调整显示设置即可查看全部独热编码列:
# 取消最大显示列数限制 pd.set_option('display.max_columns', None) # 打印全量独热编码结果 print(one_hot_encoded) # 也可直接查看结果维度确认是否符合预期,正常应该返回(500, 8) print(one_hot_encoded.shape) - 少数情况是分类列设置错误导致:如果你的Name列被显式设置为
category类型,且仅指定了2个分类,就算实际数据包含8种取值,pd.get_dummies也只会生成对应2个分类的编码列,可通过以下代码修正分类设置:test_data['Name'] = test_data['Name'].astype('category') # 重置分类为所有实际存在的唯一值 test_data['Name'] = test_data['Name'].cat.set_categories(test_data['Name'].unique()) one_hot_encoded = pd.get_dummies(test_data['Name'])
内容的提问来源于stack exchange,提问作者Jonathon Ford
相关产品推荐
相关产品推荐

