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

使用OneHotEncoder编码邮政编码时得到0维数组的问题咨询

为什么用ColumnTransformer+OneHotEncoder处理numpy数组后得到0维数组?

核心原因是scikit-learn的OneHotEncoder默认返回稀疏矩阵(sparse_output=True,scikit-learn 0.23+版本默认开启),而ColumnTransformer会将OneHotEncoder的稀疏输出与其他列的密集数组拼接成一个整体的稀疏矩阵。当你直接用np.array()转换这个稀疏矩阵时,在某些场景下会意外生成0维数组——这是稀疏矩阵转numpy数组时的一个潜在问题。

你提到的缺失值处理步骤和这个问题无关,因为你的数据没有缺失,跳过SimpleImputer完全没问题。

正确的处理方式

有两种简单的解决办法:

  • 在OneHotEncoder里显式设置sparse_output=False(旧版本用sparse=False),让编码器直接返回密集numpy数组:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
import numpy as np

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(sparse_output=False), [11])], remainder='passthrough') 
X = ct.fit_transform(X)  # 直接返回numpy数组,无需额外转换
  • 如果保留稀疏输出,使用稀疏矩阵的.toarray()方法转换为numpy数组,而非直接用np.array():
X = ct.fit_transform(X).toarray()

你用Pandas的get_dummies能成功,是因为它默认返回密集的DataFrame或数组,不会涉及稀疏矩阵的转换问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:39:17