Pandas到纽比阵列为斯凯乐派林

2024-10-02 18:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个转换器,它可以计算每组值的百分比。最初,使用熊猫是因为我是从熊猫开始的,而colnames更容易处理。但是,现在我需要集成到sklearn管道中。在

如何将转换器转换为支持sklearn管道中的numpy数组,而不是pandas数据帧? 关键是self.colname不能用于numpy数组,我认为分组需要以不同的方式执行。在

如何实现这些权重这样的转换器的持久性需要从磁盘加载,以便在管道中部署这样的转换器。在

class PercentageTransformer(TransformerMixin):
    def __init__(self, colname,typePercentage='totalTarget', _target='TARGET', _dropOriginal=True):
        self.colname = colname
        self._target = _target
        self._dropOriginal = _dropOriginal
        self.typePercentage = typePercentage

    def fit(self, X, y, *_):
        original = pd.concat([y,X], axis=1)
        grouped = original.groupby([self.colname, self._target]).size()
        if self.typePercentage == 'totalTarget':
            df = grouped / original[self._target].sum()
        else:
            df = (grouped / grouped.groupby(level=0).sum())

        if self.typePercentage == 'totalTarget':
            nameCol = "pre_" + self.colname
        else:
            nameCol = "pre2_" + self.colname
        self.nameCol = nameCol
        grouped = df.reset_index(name=nameCol)
        groupedOnly = grouped[grouped[self._target] == 1]
        groupedOnly = groupedOnly.drop(self._target, 1)

        self.result =  groupedOnly
        return self

    def transform(self, dataF):
        mergedThing = pd.merge(dataF, self.result, on=self.colname, how='left')
        mergedThing.loc[(mergedThing[self.nameCol].isnull()), self.nameCol] = 0
        if self._dropOriginal:
            mergedThing = mergedThing.drop(self.colname, 1)
        return mergedThing

它将用于这样的管道中:

^{pr2}$

pipeline将安装X和{},其中两者都是数据帧。我不确定X.as_matrix会有帮助。在


Tags: selftargetdfif管道deforiginalgrouped
1条回答
网友
1楼 · 发布于 2024-10-02 18:23:41
  • 前后转换

Pandas有一个.to_records()方法,如您所述,还有一个.as_matrix()方法。.to_records()方法实际上会为您保留列名。Numpy不支持数组中的命名列。见here。在

  • 坚持

熊猫有熊猫泡菜(obj,filename)方法,它接受pandas对象并pickles。有一个对应的熊猫。读琰泡菜(文件名)方法。在

Numpy还有一个saveload函数。在

相关问题 更多 >