【问题标题】:Why isn't pandas DataFrame's .at accessor not a method?为什么 pandas DataFrame 的 .at 访问器不是方法?
【发布时间】:2019-08-10 17:43:26
【问题描述】:

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

我不问如何使用它们。

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

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

提前致谢。

【问题讨论】:

  • 他们在幕后调用其他方法,但我猜不使用locat 显式方法的决定主要是为了语法糖。在 python 中,将切片 : 写为方法的参数是无效的语法,例如 df.loc(:)
  • 谢谢。这实际上是有道理的。你知道如何实现这样的“幕后调用”吗?

标签: python pandas indexing accessor


【解决方案1】:

如 cmets 中所述,.at[].loc[] 被实现为可切片对象,以允许 slice syntax.loc[3:5] 一样,这对于方法 (.loc(3:5)) 是不可能的。

这在 Python 中实现的方式是让 at/loc 返回一个实现 __getitem__ 的自定义对象,如下所示:

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

__getitem__ 内部的逻辑可以检查 val 传递的类型,并在传递时表现不同,例如,列表 (.loc[[False, False, False]])、函数 (.loc[lambda x: ...]) 或 slice object (@ 987654337@)

【讨论】:

    猜你喜欢
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2019-06-02
    • 1970-01-01
    • 2015-08-21
    • 2021-06-04
    • 1970-01-01
    相关资源
    最近更新 更多