继承Pandas类似乎是一个普遍的需求,但我找不到相关的参考资料。(似乎Pandas开发人员仍在处理这个问题:更容易的子类化 #60。)
有一些关于此主题的SO问题,但我希望这里的某个人可以提供一个更系统的说明,以了解满足两个一般要求的子类 pandas.DataFrame
的当前最佳方式:
- 在 MyDF 实例上调用标准 DataFrame 方法应生成 MyDF 实例
- 在 MyDF 实例上调用标准 DataFrame 方法应使所有属性仍然连接到输出
(在子类化 pandas.Series 方面是否有任何重大差异?)
用于子类化 pd.DataFrame
的代码:
import numpy as np
import pandas as pd
class MyDF(pd.DataFrame):
# how to subclass pandas DataFrame?
pass
mydf = MyDF(np.random.randn(3,4), columns=['A','B','C','D'])
print(type(mydf)) # <class '__main__.MyDF'>
# Requirement 1: Instances of MyDF, when calling standard methods of DataFrame,
# should produce instances of MyDF.
mydf_sub = mydf[['A','C']]
print(type(mydf_sub)) # <class 'pandas.core.frame.DataFrame'>
# Requirement 2: Attributes attached to instances of MyDF, when calling standard
# methods of DataFrame, should still attach to the output.
mydf.myattr = 1
mydf_cp1 = MyDF(mydf)
mydf_cp2 = mydf.copy()
print(hasattr(mydf_cp1, 'myattr')) # False
print(hasattr(mydf_cp2, 'myattr')) # False