【问题标题】:speed of .loc, .iloc, and the deprecated .ix. Why not use .ix?.loc、.iloc 和已弃用的 .ix 的速度。为什么不使用.ix?
【发布时间】: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,则它是模棱两可的。

标签: python pandas indexing


【解决方案1】:

ix 必须对标签的含义做出假设。这不是直观的行为,并且可能会导致极端情况下的严重损坏(例如当您的列标签本身是整数时)。使用loc,您只是传递标签。使用iloc,您只需传递整数位置索引。输入很明显,输出也很明显。

现在,提到的速度差异大约是毫秒或微秒,这是一种“说真的,别担心™”的差异。我认为这是一个更一致、更强大的 API 的值得权衡。 '纳夫说。

【讨论】:

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