如何使用 ColumnTransformer 和 FunctionTransformer 将相同的功能应用于许多列,但分开?

数据挖掘 scikit-学习 熊猫 特征工程 管道
2022-02-21 10:05:21

我想将 pd.cut 作为管道中的转换器应用,如下所示:

numerical_preprocessing = Pipeline([
            ('cut_into_bins', FunctionTransformer(pd.cut, kw_args={'bins': [10, 100, 1000]})
             )]

但是,我收到一个错误:ValueError("Input array must be 1 dimensional") 我可以一遍又一遍地分别编写相同的函数,但那看起来是一种糟糕的编码实践。对此有什么想法吗?

1个回答

我通过在 pd.cut 周围创建一个包装器解决了这个问题,然后使用 DataFrame 的 apply 方法应用 pd.cut:

if isinstance(x, pd.Series):
    return pd.cut(x, bins_final, labels=labels, **kwargs)
elif isinstance(x, pd.DataFrame):
    return x.apply(pd.cut, args=(bins_final,), axis=0, labels=labels, **kwargs)