子类化Pandas类似乎是一种常见的需要,但我找不到关于这个主题的参考。(熊猫开发者似乎仍在努力:Easier subclassing #60)
在这个主题上有一些堆栈溢出问题,但我希望这里的人能够提供一个更系统的说明,说明目前将pandas.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
对熊猫的子类划分是否存在显著差异
现在有一个关于如何对熊猫数据结构进行子分类的官方指南,其中包括DataFrame和Series
指南可在以下位置获得:https://pandas.pydata.org/pandas-docs/stable/development/extending.html#extending-subclassing-pandas
该指南提到Geopandas项目中的这个子类数据帧是一个很好的例子:https://github.com/geopandas/geopandas/blob/master/geopandas/geodataframe.py
在HYRY的回答中,似乎有两件事是你想要完成的:
_constructor
属性,该属性将返回您的类型李>_metadata
属性李>下面是一个例子:
对于需求1,只需定义
_constructor
:我认为对于需求2没有简单的解决方案。我认为您需要定义
__init__
、copy
,或者在_constructor
中执行某些操作,例如:相关问题 更多 >
编程相关推荐