【发布时间】:2023-03-09 15:27:01
【问题描述】:
有多个关于堆栈溢出比较loc、iloc和ix的问题如this one,以及多个关于速度差异的问题如this one。似乎共识是 .ix 更快,但它是deprecated。
这引出了我的问题,如果 .ix 快得多,尤其是在基于标签的索引中,为什么要弃用它?为什么你不想使用更快的方法?我发现弃用 .ix 的唯一原因是它让人们感到困惑,因为它同时适用于标签和整数。我错过了什么吗?还是 .ix 的唯一缺点是它令人困惑,因此将来可能不受支持?
另外,关于这三种方法的实施的附带问题。 .ix 为何更快且更不具体。这对我来说似乎违反直觉。我希望方法越通用,它就会越慢。为什么不写 loc 和 iloc 像 .ix 一样快?
【问题讨论】:
-
在该链接中,他们正在比较数据框中的 单个元素的索引,您可以使用
.at或.iat。尝试切片更大的东西来比较相关性能 -
.ix 令人困惑。假设您有一个索引为 range(2, 12) 的数据框。如果您使用 .loc[2],您将获得带有 2 标签的行。如果您使用 .iloc[2],您将获得位置 2 处的行,该行在此数据帧中将标记为 4 的行。现在,如果您使用已弃用的函数 .ix,则它是模棱两可的。