如何使用我自己的方法和函数扩展pandas的Dataframe类

时间:2017-12-21 04:19:46

标签: python pandas class inheritance dataframe

第一个问题:

我正在使用pandas的DataFrames,我经常运行相同的例程作为数据预处理和其他事情的一部分。我想将这些例程中的一些作为扩展ExtendedDataframe的名为pandas.DataFrame的类中的方法编写。我不知道怎么回事。到目前为止,我没有在我的新课程中编写任何__init__,因此它继承自pandas.DataFrame

import pandas
class ExtendedDataframe(pandas.DataFrame):
  def some_method(self):
    blahblah

这显然使我能够通过继承创建ExtendedDataframe的实例。但我通常会通过类似pandas.read_csv的内容加载数据,这会返回经典的DataFrame。我该如何才能加载此类csv数据,并在某些时候将其转换为ExtendedDataframe以使用我自己的方法,而不是标准DataFrame上提供的方法?如果加载阶段返回标准DataFrame然后我转换为ExtendedDataframe,那就没问题了。

第二个问题:

我使用的并非所有pandas的功能都是DataFrame方法。有些是将DataFrame作为参数的函数,例如pandas.merge。如何将这些函数的使用扩展到我的ExtendedDataframe类的实例?换句话说,如果df1df2ExtendedDataframe的两个实例,我该如何制作

pandas.merge([df1, df2], ...)

就像使用DataFrame的标准实例一样工作?

3 个答案:

答案 0 :(得分:2)

这并不能直接回答您的问题,但它可以解决您的问题。很多人在他们的工作流程中使用管道方法。

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pipe.html

而不是说

df = foo(df)
你可以说

df = df.pipe(foo)

您甚至可以为该功能指定参数!这比尝试封装整个数据帧类要容易得多。所以我们的想法是你可以创建一个函数库并根据需要对它们进行管道化。

答案 1 :(得分:0)

创建数据框的实例时,它们是DataFrame对象。您可以通过这种方式修改覆盖它们的现有方法____existingMethod____ 关于第二个问题,我建议你创建一个新类,在其中传递2个数据帧。在这种情况下,您必须使用____init____方法

答案 2 :(得分:0)

我不确定用于扩展DataFrame的Pandas装饰器的哪个版本。您可以在以下地址上了解更多相关信息:https://pandas.pydata.org/pandas-docs/stable/development/extending.html