gpt4 book ai didi

python - 继承 DataFrame 时如何为 'loc' 编写包装器方法

转载 作者:太空狗 更新时间:2023-10-30 02:58:14 24 4
gpt4 key购买 nike

我正在尝试为 DataFrame 的子类编写一个包装方法

class SubDataFrame(DataFrame):
...

a = SubDataFrame()
b = a.loc[row, column]

在最后一行中,我想在处理父类(super class)中的 loc 之前或之后在类 SubDataFrame 中单独处理元数据。

我不知道如何实现这个符号,因为如果我只是定义

def loc(self, *args, **kwargs)
SubDataFrame 中的

方法 loc[] 括号符号不起作用。 (AttributeError:instancemethod 没有属性 getitem)。

我找不到关于如何实现它的文档。

最佳答案

不幸的是,Pandas 实现索引的方式并不简单。

一般来说,为了在一个对象上使用索引访问(例如,obj[something]),它需要有__getitem____setitem__ 方法(参见 herehere )。

DataFrame 的情况下,loc 属性不是方法,而是委托(delegate)索引的对象:

>>> frame = pd.DataFrame()
>>> type(frame.loc)
pandas.core.indexing._LocIndexer

可以看到类定义here .在这种情况下,_LocIndexer 继承(最终)自 _NDFrameIndexer ,它定义了索引访问所需的 __getitem____setitem__ 方法。

如果你想在你的子类中拦截通过 .loc[] 的访问,你可能必须定义某种代理类来实现所需的行为,然后再传递给原始实现。不过,我怀疑这会很困难且容易出错。

关于python - 继承 DataFrame 时如何为 'loc' 编写包装器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34748831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com