将 Dropping Column 实例添加到 Pipeline 中

Tan*_*han 7 python pipeline machine-learning scikit-learn

一般来说,我们会df.drop('column_name', axis=1)删除DataFrame中的一列。我想将此变压器添加到管道中

例子:

numerical_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='mean')),
                                     ('scaler', StandardScaler(with_mean=False))
                                     ])
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

小智 20

您可以像这样编写自定义 Transformer:

class columnDropperTransformer():
    def __init__(self,columns):
        self.columns=columns

    def transform(self,X,y=None):
        return X.drop(self.columns,axis=1)

    def fit(self, X, y=None):
        return self 
Run Code Online (Sandbox Code Playgroud)

并在管道中使用它:

import pandas as pd

# sample dataframe
df = pd.DataFrame({
"col_1":["a","b","c","d"],
"col_2":["e","f","g","h"],
"col_3":[1,2,3,4],
"col_4":[5,6,7,8]
})

# your pipline
pipeline = Pipeline([
    ("columnDropper", columnDropperTransformer(['col_2','col_3']))
])

# apply the pipeline to dataframe
pipeline.fit_transform(df)
Run Code Online (Sandbox Code Playgroud)

输出 :

  col_1 col_4
0    a    5
1    b    6
2    c    7
3    d    8
Run Code Online (Sandbox Code Playgroud)


Ant*_*uis 4

您可以将您的数据封装Pipeline到一个ColumnTransformer允许您选择通过管道处理的数据中,如下所示:

import pandas as pd

from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer

from sklearn.compose import make_column_selector, make_column_transformer

col_to_exclude = 'A'
df = pd.DataFrame({'A' : [ 0]*10, 'B' : [ 1]*10, 'C' : [ 2]*10})

numerical_transformer = make_pipeline
    SimpleImputer(strategy='mean'),
    StandardScaler(with_mean=False)
)


transform = ColumnTransformer(
    (numerical_transformer, make_column_selector(pattern=f'^(?!{col_to_exclude})'))
)

transform.fit_transform(df)
Run Code Online (Sandbox Code Playgroud)

注意:我在这里使用正则表达式模式来排除该列A

  • 这尤其有效,因为“ColumnTransformer”具有默认参数“remainder='drop'” (3认同)