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

Scikit-Learn ColumnTransformer如何取消自动添加前缀?(v1.0.2)

关于ColumnTransformer自动添加列前缀的问题解答

取消自动添加前缀的方法

方法1:使用verbose_feature_names_out=False参数

从scikit-learn 0.23版本开始,ColumnTransformer新增了verbose_feature_names_out参数,设置为False即可关闭自动添加前缀的行为,直接使用特征的原始名称(或转换器生成的特征名):

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

# 示例数据集
df = pd.DataFrame({
    'Color': ['red', 'blue', 'red'],
    'Size': ['small', 'big', 'small'],
    'cost': [10, 20, 15]
})

transformer = ColumnTransformer(
    transformers=[
        ('onehot', OneHotEncoder(), ['Color', 'Size'])
    ],
    remainder='passthrough',
    verbose_feature_names_out=False  # 关闭前缀自动添加
)

transformed = transformer.fit_transform(df)
transformed_df = pd.DataFrame(transformed, columns=transformer.get_feature_names_out())

print(transformed_df.columns)
# 输出:Index(['Color_red', 'Color_blue', 'Size_small', 'Size_big', 'cost'], dtype='object')

方法2:手动清理列名(适配旧版本)

如果你的scikit-learn版本低于0.23,可以手动提取列名并清理前缀:

feature_names = transformer.get_feature_names_out()
# 按双下划线分割,取最后一部分作为列名
cleaned_names = [name.split('__')[-1] for name in feature_names]
transformed_df = pd.DataFrame(transformed, columns=cleaned_names)

print(transformed_df.columns)
# 输出:Index(['color_red', 'color_blue', 'size_small', 'size_big', 'cost'], dtype='object')

自动添加前缀的设计原因

  • 避免列名冲突:当多个转换器处理不同字段但可能生成同名特征,或者remainder保留的原始列与转换后的特征重名时,前缀能确保所有列名唯一,防止后续数据处理出现混乱。
  • 明确特征来源:前缀可以快速标识特征的生成逻辑,比如onehot__color_red能直接看出是由OneHotEncoder处理Color列生成的,方便调试和维护复杂的数据转换流程。
  • 适配Pipeline复杂场景:在多步骤的机器学习Pipeline中,前缀机制能清晰追踪特征的生成路径,提升整个转换流程的可解释性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:52:20