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

Label Encoder后执行One Hot Encoder报错:Expected 2D array, got 1D array instead

解决OneHotEncoder报错:Expected 2D array, got 1D array instead

嘿,这个问题我太熟悉了!Sklearn的OneHotEncoder对输入维度有严格要求——它必须接收2维数组,但你直接传入的df['info.venue']是1维的Pandas Series,这就是触发错误的核心原因。哪怕你已经用LabelEncoder做过编码,输出的依然是1维数据,所以还是会踩这个坑。

给你几个简单可行的解决方案:

方法1:把1维Series转成2维数组

用values.reshape(-1, 1)把Series转换成符合要求的2D格式:

from sklearn.preprocessing import OneHotEncoder
onehotencoder = OneHotEncoder()
# 用reshape把1D转成2D
var1 = onehotencoder.fit_transform(df['info.venue'].values.reshape(-1, 1))

方法2:传入DataFrame而非Series

直接用双层方括号df[['info.venue']]提取列,这样得到的是一个只有1列的DataFrame(天然是2维结构):

var1 = onehotencoder.fit_transform(df[['info.venue']])

方法3:用Pandas的get_dummies更省心

如果你不需要严格用Sklearn的编码器,Pandas的get_dummies可以一步完成独热编码,还能自动处理列名,非常方便:

import pandas as pd
# 生成独热编码列,前缀设为venue方便识别
venue_onehot = pd.get_dummies(df['info.venue'], prefix='venue')
# 把编码后的列合并回原DataFrame
df = pd.concat([df, venue_onehot], axis=1)

如果之后要和Sklearn的Pipeline配合使用,推荐用ColumnTransformer来指定要编码的列,这样能彻底避免维度问题,比如:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

# 定义转换器:对info.venue列做独热编码
ct = ColumnTransformer(
    transformers=[('encoder', OneHotEncoder(), ['info.venue'])],
    remainder='passthrough'
)
# 应用转换器,输出的是2D数组
df_encoded = ct.fit_transform(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:50:24