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'实例方法。