为了账号安全,请及时绑定邮箱和手机立即绑定

将 ColumnTransformer() 结果附加到管道中的原始数据?

将 ColumnTransformer() 结果附加到管道中的原始数据?

慕神8447489 2021-11-02 17:10:29
这是我的输入数据:这是所需的输出,其中对列 r、f 和 m 进行了转换,并将结果附加到原始数据这是代码:import pandas as pdimport numpy as npfrom sklearn.preprocessing import StandardScalerfrom sklearn.compose import ColumnTransformerfrom sklearn.preprocessing import PowerTransformer    df = pd.DataFrame(np.random.randint(0,100,size=(10, 3)), columns=list('rfm'))column_trans = ColumnTransformer(    [('r_std', StandardScaler(), ['r']),     ('f_std', StandardScaler(), ['f']),     ('m_std', StandardScaler(), ['m']),     ('r_boxcox', PowerTransformer(method='box-cox'), ['r']),     ('f_boxcox', PowerTransformer(method='box-cox'), ['f']),     ('m_boxcox', PowerTransformer(method='box-cox'), ['m']),    ])transformed = column_trans.fit_transform(df)new_cols = ['r_std', 'f_std', 'm_std', 'r_boxcox', 'f_boxcox', 'm_boxcox']transformed_df = pd.DataFrame(transformed, columns=new_cols)pd.concat([df, transformed_df], axis = 1)我还需要额外的转换器,所以我需要将原始列保留在管道中。有没有更好的方法来处理这个问题?特别是在管道中进行串联和列命名?
查看完整描述

2 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

是的,有一种方法可以做到这一点,幸运地包含在 SKLearn 中。在ColumnTransformer的原始文档中,您可以找到令人困惑但有用的一行,如下所示:


变压器{'drop'、'passthrough'} 或估算器


Estimator 必须支持拟合和变换。特殊情况的字符串 'drop' 和 'passthrough' 也被接受,分别表示删除列或将它们传递给未转换的列。


这意味着如果您想在 期间保留一列ColumnTransformer或在 期间删除一列ColumnTransformer,您可以简单地使用两个特殊大小写的字符串之一来指示它,就像这样:


column_trans = ColumnTransformer(

[('r_std', StandardScaler(), ['r']),

 ('f_std', StandardScaler(), ['f']),

 ('m_std', StandardScaler(), ['m']),

 ('r_boxcox', PowerTransformer(method='box-cox'), ['r']),

 ('f_boxcox', PowerTransformer(method='box-cox'), ['f']),

 ('m_boxcox', PowerTransformer(method='box-cox'), ['m']),

 ('col_keep', 'passthrough', ['r','f','m'])

])

如果您然后使用ColumnTransformer,那 3 列将被保留并且不会被删除。或者,如果您使用'drop'代替'passthrough',则可以有选择地删除某些列。这remainder='passthrough'将允许您删除一些列并保留所有其他列。希望这个对你有帮助!



查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信