【问题标题】:Adding Dropping Column instance into a Pipeline将 Dropping Column 实例添加到管道中
【发布时间】:2021-09-24 21:15:32
【问题描述】:

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

例子:

numerical_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='mean')),
                                     ('scaler', StandardScaler(with_mean=False))
                                     ])

我该怎么做?

【问题讨论】:

    标签: python machine-learning scikit-learn pipeline


    【解决方案1】:

    您可以将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)
    

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

    【讨论】:

      【解决方案2】:

      您可以编写像这样的自定义变压器:

      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 
      

      并在管道中使用它:

      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)
      

      输出:

        col_1 col_4
      0    a    5
      1    b    6
      2    c    7
      3    d    8
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-14
        • 2019-04-22
        • 2017-02-28
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多