【问题标题】:how to integrate a pandas operation into sklearn pipeline如何将熊猫操作集成到 sklearn 管道中
【发布时间】:2018-12-12 07:44:35
【问题描述】:

我对 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 管道的一部分。我找到了一些教程hereherehere。但我就是无法让它为我工作。这是我尝试过的许多版本中的一个:

# 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'。谁能帮我解决这个问题并让它工作?谢谢!

【问题讨论】:

    标签: python pandas class scikit-learn pipeline


    【解决方案1】:

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

    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
    

    【讨论】:

    • 另外,您可能需要编写一个方法 inverse_transform() 来恢复值
    猜你喜欢
    • 2019-09-21
    • 2021-03-06
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2019-01-11
    • 2019-04-14
    • 2020-12-20
    • 2021-12-20
    相关资源
    最近更新 更多