我试图为DataFrame
class SubDataFrame(DataFrame):
...
a = SubDataFrame()
b = a.loc[row, column]
在最后一行中,我希望在处理超类中的SubDataFrame
之前或之后,在类loc
中单独处理元数据。
我不知道如何实现这种表示法,因为如果我只是定义
def loc(self, *args, **kwargs)
SubDataFrame
loc[]
括号表示法中的方法无法正常工作。 (AttributeError: instancemethod has no attribute getitem
)。
我找不到关于如何实现这一点的文档。
答案 0 :(得分:4)
不幸的是,Pandas实现索引的方式并不简单。
通常,为了对对象使用索引访问(例如obj[something]
),需要使用__getitem__
和__setitem__
方法(请参阅here和{ {3}})。
对于DataFrame
,loc
属性不是方法,而是委托索引的对象:
>>> frame = pd.DataFrame()
>>> type(frame.loc)
pandas.core.indexing._LocIndexer
您可以看到课程定义here。在这种情况下,_LocIndexer
从({3}}继承(最终),它定义了索引访问所需的__getitem__
和__setitem__
方法。
如果要拦截子类中.loc[]
的访问权限,则可能必须定义某种代理类,该代理类在传递给原始实现之前实现所需的行为。我怀疑这将是困难且容易出错的。