为什么 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]
)
我最近一直在使用 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]
)