python - 在管道过程中创建新的 Pandas Dataframe 列
问题描述
我很抱歉,但如果不举我的例子,我不确定如何解释这一点,因此:
对于 Kaggle 中的 titanic 数据集,有些人添加了一个名为“isChild”的新列,并将其应用于年龄列,如果年龄低于 13 岁,他/她是成年人。从那里他们可以很好地预处理、创建和调整他们的模型。
如果我要创建相同的模型并将其部署到任何人都可以使用 Dataframe 的原始输入在前端填写表单的地方,那么该模型将无法工作,因为“isChild”是在预处理部分计算的。
我了解人们使用 Pipeline 和 make_pipline 来创建流程,但我的问题是人们总是在 Pipeline 中添加通用步骤,例如 PCA 或估算缺失值。如何添加一个步骤来添加这个新列,然后在模型中运行它?
如果您能指导我或为我提供一些有用的信息或回答这个问题,我们将不胜感激。
解决方案
所以我的问题的答案是我首先必须创建一个类,如下所示:
class DataframeFunctionTransformer():
def __init__(self, func):
self.func = func
def transform(self, input_df, **transform_params):
return self.func(input_df)
def fit(self, X, y=None, **fit_params):
return self
然后一旦创建了这个类,我就可以创建自己的函数,即向 Titanic Dataframe 添加一个新列(isChild 列):
def ischild(dataset):
dataset['Child'] = dataset['Age'].apply(lambda x: 'Yes' if x<13 else 'No')
return dataset
现在,当使用 sklearn 创建管道时,我可以像这样使用我的新函数:
from sklearn.pipeline import Pipeline
pipeline = Pipeline([
("ChildColumn", DataframeFunctionTransformer(ischild))
])
谢谢你。
推荐阅读
- react-native - react-native 允许我直接操作道具
- javascript - 滚动到一组div时获取它的索引
- php - Laravel - 根据选择禁用日期选择器中的日期
- c# - Angular 6 中的强类型 SignalR Hub
- firebase - 您可以通过链接(即动态链接)共享 Firestore 文档吗?
- java - 尝试从 SwingWorker 更新时,Swing UI 冻结
- java - 使用 mockito 进行测试失败,但应用程序有效
- r - 在 RStudio 错误中分配值而不是过滤
- c# - 如何在不移动盒子的情况下进行 BoxCast()?
- firebase - 根据密钥获取 Firebase 条目