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

Python中使用OrdinalEncoder编码序数分类值遇维度错误求助

解决OrdinalEncoder的ValueError:Expected 2D array, got 1D array instead

这个问题其实很常见,核心原因是**OrdinalEncoder和LabelEncoder的输入要求不一样**:

  • LabelEncoder是专门为单一列(或1D数组)设计的,所以你之前用它处理其他列时完全没问题;
  • 而OrdinalEncoder是用来处理多列特征的编码器,它要求输入必须是2D数组(哪怕你只处理一列),但你提取的X[:,2]是1D的(形状类似(n_samples,)),这就触发了报错。

另外还有一个小细节:你给OrdinalEncoder的categories参数传的是一维列表,但这个参数要求传入嵌套列表(每个子列表对应一列的自定义顺序),这个不修正的话后续也会出问题。

修正后的代码片段

替换你原来的编码部分:

category_array = ["Tiny Mongra","Mini Mongra","Mongra","Super Mongra","Mini Dubar","Dubar","Super Dubar","Mini Tibar","Tibar","Super Tibar","2nd Wand","Super 2nd Wand","1st Wand"]
# 把categories改成嵌套列表,适配OrdinalEncoder的要求
ordinalencoder_X_3 = OrdinalEncoder(categories=[category_array])
# 将1D的列转为2D数组,编码后再转回1D赋值回原数组
X[:, 2] = ordinalencoder_X_3.fit_transform(X[:, 2].reshape(-1, 1)).flatten()

或者你也可以用双括号索引直接获取2D的列,这样更简洁:

X[:, 2] = ordinalencoder_X_3.fit_transform(X[:, [2]]).flatten()

验证效果

这样修改后,编码结果会严格按照你定义的顺序:

  • "Tiny Mongra" → 0
  • "Mini Mongra" → 1
  • ...
  • "1st Wand" → 12
    完全符合你的预期。

内容的提问来源于stack exchange,提问作者Anhad Singh Arora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:47:46