内容简介:http://stackoverflow.com/questions/22155951/how-to-subclass-pandas-dataframe
分类大pandas类似乎是一个常见的需求,但我找不到关于这个问题的参考. (看起来,大pandas的开发人员还在努力: https://github.com/pydata/pandas/issues/60
).
有一些SO线程的主题,但我希望有人在这里可以提供一个更系统的帐户,目前最好的方式,子类化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
对于分类大pandasSeries有什么显着的差异?谢谢.
对于要求1,只需定义_constructor:
import pandas as pd import numpy as np class MyDF(pd.DataFrame): @property def _constructor(self): return MyDF mydf = MyDF(np.random.randn(3,4), columns=['A','B','C','D']) print type(mydf) mydf_sub = mydf[['A','C']] print type(mydf_sub)
我认为需求2没有简单的解决方案,我想你需要定义__init__,复制或者在_constructor中做一些事情,例如:
import pandas as pd import numpy as np class MyDF(pd.DataFrame): _attributes_ = "myattr1,myattr2" def __init__(self, *args, **kw): super(MyDF, self).__init__(*args, **kw) if len(args) == 1 and isinstance(args[0], MyDF): args[0]._copy_attrs(self) def _copy_attrs(self, df): for attr in self._attributes_.split(","): df.__dict__[attr] = getattr(self, attr, None) @property def _constructor(self): def f(*args, **kw): df = MyDF(*args, **kw) self._copy_attrs(df) return df return f mydf = MyDF(np.random.randn(3,4), columns=['A','B','C','D']) print type(mydf) mydf_sub = mydf[['A','C']] print type(mydf_sub) mydf.myattr1 = 1 mydf_cp1 = MyDF(mydf) mydf_cp2 = mydf.copy() print mydf_cp1.myattr1, mydf_cp2.myattr1
http://stackoverflow.com/questions/22155951/how-to-subclass-pandas-dataframe
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 父类返回子类类型的函数写法
- 从python中的父类文件调用子类方法
- golang 父类调用子类方法、继承多态的实现方式
- ios – 在哪里为子类的uitableviewcell创建自动布局约束?
- C#中子类对基类方法的继承、重写和隐藏
- 如何用 SQL 中的循环查询无限级分类的所有子类
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。