为什么 pandas DataFrame 的 .at 访问器不是方法?

Why isn't pandas DataFrame's .at accessor not a method?

我最近一直在使用 pandas,当然也使用了 .at[].loc[]访问器。

我不问怎么用

我想了解它们是如何工作的以及为什么它们没有作为方法实现

这可能是一个我不知道的一般性 Python 主题。随意参考其他线程。我搜索了但没有找到任何有用的东西。

提前致谢。

如评论中所述,.at[] and .loc[] are implemented as sliceable objects to allow slice syntax 类似于 .loc[3:5],这对于方法 (.loc(3:5)) 是不可能的。

在 Python 中的实现方式是使 at/loc return 成为实现 __getitem__ 的自定义对象,如下所示:

class C(object):
  def __getitem__(self, val):
    print val

__getitem__里面的逻辑可以检查val传递的类型,传递的时候表现不同,比如一个列表(.loc[[False, False, False]]),一个函数(.loc[lambda x: ...]), 或 slice object (.loc[3:5])