Python 如何在scikit学习列选择器管道中仅选择少数列?

Python 如何在scikit学习列选择器管道中仅选择少数列?,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,我正在阅读关于列转换器的scikitlearn教程。给出的示例是有效的,但当我尝试只选择少数列时,它会给我错误信息 MWE 要求的 我只想要输出中的select列 注 当然,我知道我可以做df[mycols],我正在寻找scikit学习管道示例。如果您不介意mlxtend,它有内置的转换器 使用mlxtend 对于sklearn>=0.20 参考: 从sklearn.compose导入ColumnTransformer 从sklearn.pipeline导入管道 导入seaborn作为sns d

我正在阅读关于列转换器的scikitlearn教程。给出的示例是有效的,但当我尝试只选择少数列时,它会给我错误信息

MWE 要求的 我只想要输出中的select列

注 当然,我知道我可以做df[mycols],我正在寻找scikit学习管道示例。

如果您不介意mlxtend,它有内置的转换器

使用mlxtend 对于sklearn>=0.20 参考: 从sklearn.compose导入ColumnTransformer 从sklearn.pipeline导入管道 导入seaborn作为sns df=sns.load_数据集'tips' mycols=['tip','sex'] 管道=管道[ 柱状变压器选择器[ 选择器,直通,mycols ],余数=下降 ] pipeline.fit_transformdf 对于小于0.20的sklearn
我可能有点晚了,但您也可以使用sklearn的ColumnTranformer选择列,方法是将转换器设置为passthrough和rements='drop':


你的scikit和python版本是什么?sklearn.\uuuuuuu版本\uuuuuuu'0.22.2.post1'但是当管道中紧跟着编码器时,mlextend的ColumnSelector无法正常工作。在我的例子中,编写自定义估计器已经解决了这个问题,在这里我可以得到数字和分类Piepline所需的列名。
import numpy as np
import pandas as pd
import seaborn as sns

from sklearn.compose import make_column_transformer
from sklearn.compose import make_column_selector

df = sns.load_dataset('tips')
mycols = ['tip','sex']


ct = make_column_transformer(make_column_selector(pattern=mycols)
ct.fit_transform(df)
from mlxtend.feature_selection import ColumnSelector

pipe = ColumnSelector(mycols)
pipe.fit_transform(df)
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.pipeline import Pipeline

class FeatureSelector(BaseEstimator, TransformerMixin):
    def __init__(self, columns):
        self.columns = columns

    def fit(self, X, y=None):
        return self

    def transform(self, X, y=None):
        return X[self.columns]


pipeline = Pipeline([('selector', FeatureSelector(columns=mycols))
                     ])

pipeline.fit_transform(df)[:5]
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline


pipe = Pipeline([
    ("selector", ColumnTransformer([
        ("selector", "passthrough", mycols)
    ], remainder="drop"))
])