使用OneHotEncoder对df的sex列独热编码仍报2D数组错误如何解决
错误原因
- 维度调整的位置错误:
OneHotEncoder.fit_transform要求输入为二维数组,你当前直接传入一维的df['sex'](Series类型)就触发了报错,reshape操作放在转换完成后无法解决输入维度的问题。 - 未初始化
OneHotEncoder实例:代码中直接使用ohe变量,没有提前创建OneHotEncoder类的实例,后续还会触发变量未定义的报错。 - 赋值维度不匹配:sex列为二分类特征,默认one-hot编码会输出2列结果,直接赋值给单列的
df['sex']会出现维度不兼容的问题。
解决方法
方案1:使用pandas内置get_dummies(更简洁,无需手动处理维度)
该方法无需导入sklearn的编码器,自动生成带前缀的one-hot列:
import pandas as pd df = pd.read_csv('C:/Users/User/Downloads/suicide_rates.csv') # 生成one-hot列并合并到原数据框,prefix参数指定列名前缀 df = pd.concat([df, pd.get_dummies(df['sex'], prefix='sex')], axis=1) # 可按需删除原始的sex列 df.drop('sex', axis=1, inplace=True)
方案2:修正OneHotEncoder的调用逻辑
如果需要用sklearn的编码器,调整输入维度和初始化逻辑即可:
import pandas as pd from sklearn.preprocessing import OneHotEncoder df = pd.read_csv('C:/Users/User/Downloads/suicide_rates.csv') # 初始化编码器,sparse_output=False直接输出数组,drop='first'避免多重共线性,二分类场景输出1列 ohe = OneHotEncoder(sparse_output=False, drop='first') # 用双层方括号取sex列,得到的是二维DataFrame,符合编码器的输入要求 df['sex'] = ohe.fit_transform(df[['sex']])
补充说明:如果不需要删去重复列,去掉
drop='first'参数即可,此时输出为2列,需要用pd.concat把编码结果合并到原数据框,不能直接赋值给单列的df['sex']。
内容的提问来源于stack exchange,提问作者melololo
相关产品推荐
相关产品推荐

