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

如何从嵌入ColumnTransformer的OneHotEncoder中获取特征名称?

如何从嵌入ColumnTransformer的OneHotEncoder中获取特征名称?

错误原因

你遇到的NotFittedError是因为ColumnTransformer内部会创建传入的编码器的副本,而非直接使用你定义的原始ohe实例进行拟合。当你调用transformer.fit_transform(df)时,实际是ColumnTransformer内部的副本完成了拟合,而你代码里的ohe变量从未被真正拟合过,所以调用它的get_feature_names_out()会报错。

解决方法

有两种可靠的方式获取特征名称:

方法1:从ColumnTransformer中提取拟合后的编码器实例

通过ColumnTransformer的named_transformers_属性,根据转换器的名称(这里是encoder)获取已经拟合好的OneHotEncoder实例,再调用其特征名称方法:

import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

df = pd.DataFrame(data = [[1],[2]], columns = ['C'])
ohe = OneHotEncoder(sparse_output = False)
transformer = ColumnTransformer(transformers = [('encoder', ohe, ['C'])])
transformer.fit_transform(df)

# 获取拟合后的编码器并输出特征名称
fitted_ohe = transformer.named_transformers_['encoder']
print(fitted_ohe.get_feature_names_out())
# 输出: ['C_1' 'C_2']

方法2:直接使用ColumnTransformer的get_feature_names_out()

ColumnTransformer本身提供了get_feature_names_out()方法,会自动整合所有转换器生成的特征名称,无需单独提取编码器:

import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

df = pd.DataFrame(data = [[1],[2]], columns = ['C'])
ohe = OneHotEncoder(sparse_output = False)
transformer = ColumnTransformer(transformers = [('encoder', ohe, ['C'])])
transformer.fit_transform(df)

# 直接从ColumnTransformer获取特征名称
print(transformer.get_feature_names_out())
# 输出: ['encoder__C_1' 'encoder__C_2']

这种方法更适合多转换器的场景,能统一管理所有特征名称。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:42:11