Pandas 通过管道传递函数列表

nin*_*zzo 1 python dataframe pandas

我编写了以下代码来通过管道传输数据集的一些转换:

def func(self,df):
    ...
    return (df.pipe(self.transformations[0])
              .pipe(self.transformations[1]
              .
              .pipe(self.transformations[n])
Run Code Online (Sandbox Code Playgroud)

我想以更Pythonic的方式重写它,从列表转换中的元素数量中抽象出来,这样就不必对转换进行硬编码,而只需将它们添加到列表中即可。

我考虑了一个 for 循环,其中我在每次迭代时通过转换更新数据帧,但我想要一种更简洁的方法来执行此操作。

有什么建议吗?

Kyl*_*ons 5

考虑使用reduce它可以在大部分时间代替循环和递归。

from functools import reduce

def func(self, df):
    return reduce(lambda _df, trans: _df.pipe(trans), self.transformations, df)
Run Code Online (Sandbox Code Playgroud)