gpt4 book ai didi

python - FunctionTransformer & 在管道中创建新列

转载 作者:行者123 更新时间:2023-12-05 03:22:51 25 4
gpt4 key购买 nike

我有一个示例数据:

df = pd.DataFrame(columns=['X1', 'X2', 'X3'], data=[
[1,16,9],
[4,36,16],
[1,16,9],
[2,9,8],
[3,36,15],
[2,49,16],
[4,25,14],
[5,36,17]])

我想根据 x2 和 X3 在我的 df 中创建两个互补列并将其包含在管道中。

我正在尝试遵循代码:

def feat_comp(x):
x1 = 100-x
return x1

pipe_text = Pipeline([('col_test', FunctionTransformer(feat_comp, 'X2',validate=False))])
X = pipe_text.fit_transform(df)

它给我一个错误:

TypeError: 'str' object is not callable

如何在选定的列上应用函数转换器以及如何在管道中使用它们?

最佳答案

如果我没理解错的话,您想添加一个基于给定列的新列,例如X2。您需要使用 kw_args 将此列作为附加参数传递给函数:

import pandas as pd
from sklearn.preprocessing import FunctionTransformer
from sklearn.pipeline import Pipeline

df = pd.DataFrame(columns=['X1', 'X2', 'X3'], data=[
[1,16,9],
[4,36,16],
[1,16,9],
[2,9,8],
[3,36,15],
[2,49,16],
[4,25,14],
[5,36,17]])

def feat_comp(x, column):
x[f'100-{column}'] = 100 - x[column]
return x

pipe_text = Pipeline([('col_test', FunctionTransformer(feat_comp, validate=False, kw_args={'column': 'X2'}))])
pipe_text.fit_transform(df)

结果:

   X1  X2  X3  100-X2
0 1 16 9 84
1 4 36 16 64
2 1 16 9 84
3 2 9 8 91
4 3 36 15 64
5 2 49 16 51
6 4 25 14 75
7 5 36 17 64

(在您的示例中 FunctionTransformer(feat_comp, 'X2',validate=False) X2 将是 inverse_func 和字符串 X2 不可调用,因此错误)

关于python - FunctionTransformer & 在管道中创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72600532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com