代码之家  ›  专栏  ›  技术社区  ›  user3768495

如何将pandas操作集成到sklearn管道中

  •  0
  • user3768495  · 技术社区  · 7 年前

    我对pandas数据框有一个简单的操作,如下所示:

    # initialization
    dct = {1: 'A', 2:'B', 3: 'C'}
    df = pd.DataFrame({'id': [1,2,3], 'value':[7,8,9]})
    # actual transformation
    df['newid'] = df.id.map(dct)
    

    我想把这个转换作为sklearn管道的一部分。我找到了一些教程 here 我是说, here ,和 here 是的。但我就是不能让它为我工作。以下是我尝试过的许多版本的一个版本:

    # initialization
    dct = {1: 'A', 2:'B', 3: 'C'}
    df = pd.DataFrame({'id': [1,2,3], 'value':[7,8,9]})
    
    # define a class similar to those in the tutorials
    class idMapper(BaseEstimator, TransformerMixin):
        def __init__(self, key='id'):
            self.key = key
    
        def fit(self, X, y=None):
            return self
    
        def transform(self, X):
            return X[key].map(dct)
    
    # Apply the transformation
    idMapper.fit_transform(df)
    

    错误消息如下: TypeError: fit_transform() missing 1 required positional argument: 'X' 是的。有人能帮我解决这个问题并让它正常工作吗?谢谢!

    1 回复  |  直到 7 年前
        1
  •  3
  •   Jan K    7 年前

    请参阅下面更正的代码版本。评论中给出的解释。

    dct = {1: 'A', 2:'B', 3: 'C'}
    df = pd.DataFrame({'id': [1,2,3], 'value':[7,8,9]})
    
    # define a class similar to those in the tutorials
    class idMapper(BaseEstimator, TransformerMixin):
        def __init__(self, key='id'):
            self.key = key
    
        def fit(self, X, y=None):
            return self
    
        def transform(self, X):
            return X[self.key].map(dct)  # <--- self.key
    
    # Apply the transformation
    idMapper().fit_transform(df)  # <--- need to instantiate