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

如何在scikit-learn的ColumnTransformer中对相同列应用多个变换

问题原因

ColumnTransformer的核心逻辑是并行执行所有注册的转换器,每个转换器的输出结果会横向拼接,因此你给两个转换器分别传入2列的情况下,最终会输出4列结果,不符合「先填充缺失值、再标准化」的串行处理需求。

解决方案

使用Pipeline将多个步骤按执行顺序串成处理流水线,再应用到目标列即可,最终输出列数和输入列数完全一致:

import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline

# 原始数据
df = pd.DataFrame(
{
    'x' : range(0,5),
    'y' : [1,2,3,np.nan, np.nan]
})

# 定义串行处理流水线:先填充缺失值,再做标准化
preprocess_pipeline = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())
])

# 将流水线应用到x、y两列
columnPreprocess = ColumnTransformer([
    ('preprocess', preprocess_pipeline, ['x', 'y'])
])

# 转换结果为2列数组,符合预期
result = columnPreprocess.fit_transform(df)

如果所有输入列都需要执行完全相同的处理步骤,可以省略ColumnTransformer,直接调用流水线处理:

result = preprocess_pipeline.fit_transform(df[['x','y']])

如果后续需要对不同列组做不同处理(比如类别列做独热编码、数值列做填充+标准化),只需要在ColumnTransformer中给不同列组分配对应处理逻辑的Pipeline即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:48:02