Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在类中构造一系列df操作的更好方法_Python_Pandas_Oop_Dataframe_Functional Programming - Fatal编程技术网

Python 在类中构造一系列df操作的更好方法

Python 在类中构造一系列df操作的更好方法,python,pandas,oop,dataframe,functional-programming,Python,Pandas,Oop,Dataframe,Functional Programming,如何更好地构造类中的代码,以便类返回所需的df,但没有按顺序调用许多其他方法的main方法。我发现,在很多情况下,我达到这种结构,它似乎很糟糕。我有一个df,我只是用其他基本函数(我的单元测试)的结果覆盖它,直到我得到我想要的 class A: def main(self): df = self.load_file_into_df() df = self.add_x_columns(df) df = self.calculate_y(df) df = self.calc

如何更好地构造类中的代码,以便类返回所需的
df
,但没有按顺序调用许多其他方法的main方法。我发现,在很多情况下,我达到这种结构,它似乎很糟糕。我有一个
df
,我只是用其他基本函数(我的单元测试)的结果覆盖它,直到我得到我想要的

class A:
 def main(self):
   df = self.load_file_into_df()
   df = self.add_x_columns(df)
   df = self.calculate_y(df)
   df = self.calculate_consequence(df)
   ...
   return df

 def add_x_columns(df)
 def calculate_y(df)
 def calculate_consequence(df)
 ...

# now use it somewhere else
df = A().main()
管 您可能希望利用的一个功能是。这被认为是“潘多拉”,因为它有助于操作员链接

在我看来,应该将读取数据到数据帧与操作数据帧分开。例如:

class A:
    def main(self):
        df = self.load_file_into_df()

        df = df.pipe(self.add_x_columns)\
               .pipe(self.calculate_y)\
               .pipe(self.calculate_consequence)

    return df
组成 函数组合不是Python固有的,但第三方库确实提供了此功能。这允许您惰性地定义链接函数。注意操作顺序相反,即首先执行
compose
的最后一个参数

from toolz import compose

class A:
    def main(self)
        df = self.load_file_into_df()

        transformer = compose(self.calculate_consequence,
                              self.calculate_y,
                              self.add_x_columns)

        df = df.pipe(transformer)

    return df
在我看来,
compose
提供了一个灵活且适应性强的解决方案。例如,您可以定义任意数量的合成,并在工作流中的不同点选择性地或重复地应用它们