Python 当子类化DataFrame时,如何为';loc';
我正在尝试为Python 当子类化DataFrame时,如何为';loc';,python,pandas,subclass,Python,Pandas,Subclass,我正在尝试为DataFrame class SubDataFrame(DataFrame): ... a = SubDataFrame() b = a.loc[row, column] 在最后一行中,我想在处理超类中的loc之前或之后在类SubDataFrame中分别处理元数据 我不知道如何实现这个符号,因为如果我只是定义 def loc(self, *args, **kwargs) SubDataFrame中的方法loc[]括号表示法不起作用。(AttributeError:ins
DataFrame
class SubDataFrame(DataFrame):
...
a = SubDataFrame()
b = a.loc[row, column]
在最后一行中,我想在处理超类中的loc
之前或之后在类SubDataFrame
中分别处理元数据
我不知道如何实现这个符号,因为如果我只是定义
def loc(self, *args, **kwargs)
SubDataFrame
中的方法loc[]
括号表示法不起作用。(AttributeError:instancemethod没有属性getitem
)
我找不到关于如何实现这一点的文档。不幸的是,Pandas实现索引的方式一点也不简单 一般来说,为了在对象(例如,
obj[something]
)上使用索引访问,它需要有\uuuu getitem\uuuuuuuuuuuu
和\uuuuuuu setitem\uuuuuuuuuuu
方法(请参阅和)
在数据帧
的情况下,loc
属性不是一个方法,而是一个索引委托给的对象:
>>> frame = pd.DataFrame()
>>> type(frame.loc)
pandas.core.indexing._LocIndexer
您可以看到类定义。在这种情况下,\u LocIndexer
继承(最终)自,它定义了索引访问所需的\u getitem\u
和\u setitem\u
方法
如果您想通过子类中的
.loc[]
拦截访问,您可能需要定义某种代理类,在转换到原始实现之前实现所需的行为。不过,我怀疑这会很困难,而且容易出错。值得一提的是,这可能会被视为熊猫滥用符号,这会导致OP所面临的混乱局面。谢谢你的回答。这确实令人困惑,我认为过于复杂,无法长期维持。我将编写一个简单的'loc'实例方法。