Python 如何使用“ColumnTransformer”?

Python 如何使用“ColumnTransformer”?,python,scikit-learn,Python,Scikit Learn,我正在尝试使用scikitlearn的ColumnTransformer。 以下是我所拥有的: median_imputer = SimpleImputer(strategy = 'median') mean_imputer = SimpleImputer(strategy = 'mean') ct = ColumnTransformer([("LotFrontage", median_imputer, X_train.LotFrontage), ("MasVnr

我正在尝试使用scikitlearn的
ColumnTransformer

以下是我所拥有的:

median_imputer = SimpleImputer(strategy = 'median')
mean_imputer = SimpleImputer(strategy = 'mean')

ct = ColumnTransformer([("LotFrontage", median_imputer, X_train.LotFrontage), ("MasVnrArea", median_imputer, X_train.MasVnrArea), ("GarageYrBlt", median_imputer, X_train.GarageYrBlt)])

imputed_X_train = pd.DataFrame(ct.fit_transform(X_train))
但这似乎不起作用,我得到了关于
fit\u变换的以下值error:
“没有有效的列规范。只允许所有整数或字符串的标量、列表或切片,或布尔掩码”
我做错了什么?

您正在传递每个三元组的第三个元素的实际列数据(
X_train.LotFrontage
等)。您应该传递列的名称[还有其他选项,请参阅文档],例如

ct=柱状变压器([
(“中位输入者,[“临街区”,“马斯夫拉雷亚]),
(“平均值输入”,平均值输入,[“GarageYrBlt”])
])

(由于插补器对2D输入进行操作,您需要提供一个列列表。我将两个列组合在一起,并使用了您的
mean_插补器
,只是为了使示例更复杂一些。)

名称的用途是什么?例如,“med_imp”在哪里发挥作用?来自文档:“与管道和功能联盟一样,这允许使用set_params设置变压器及其参数,并在网格搜索中进行搜索。”您还可以在名为_transformers
中获得安装的变压器,这是字典式的,以这些名字为关键。最后,
get\u feature\u names
将转换后的列名与转换器名放在一起。