我有一个样本数据:

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 ad X3的df中创建两个互补列,并将其包含在管道中.

我正在try 遵循代码:

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相关问答推荐

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

Polars比较了两个预设-有没有方法在第一次不匹配时立即失败

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

在Python中管理打开对话框

Pandas—合并数据帧,在公共列上保留非空值,在另一列上保留平均值

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

如何创建引用列表并分配值的Systemrame列

导入错误:无法导入名称';操作';

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';

每次查询的流通股数量

如何设置nan值为numpy数组多条件

如何在Python中解析特定的文本,这些文本包含了同一行中的所有内容,

上传文件并使用Panda打开时的Flask 问题

启动线程时,Python键盘模块冻结/不工作

关于数字S种子序列内部工作原理的困惑

Django查询集-排除True值

根据两个lambda条件筛选组并根据条件创建新列的最佳方式是什么?

Pandas:新列,从列表中采样,基于列值