Pandas 中的 grouby() 函数返回 IndexError:索引 2 超出轴 0 的范围,大小为 2

Posted

技术标签:

【中文标题】Pandas 中的 grouby() 函数返回 IndexError:索引 2 超出轴 0 的范围,大小为 2【英文标题】:grouby() function in Pandas returning IndexError: index 2 is out of bounds for axis 0 with size 2 【发布时间】:2021-11-24 08:02:05 【问题描述】:

升级 Python 环境后,我注意到 pandas 库中的函数 groupby() 返回类型错误消息

IndexError: index 2 is out of bounds for axis 0 with size 2

偶尔,即使在较旧的 Python 环境中一切都运行良好。在这种特殊情况下,错误实际上意味着在某个列中有两个唯一值(例如 ab),但相关的 pandas 函数会生成索引 [0, 1, 2]。这意味着索引2 没有自己的唯一值。因此错误消息。

由于错误似乎没有遵循任何明显的模式,我“潜入”了 pandas 代码。我能够在 sorting.py 文件中将问题的根源追踪到函数 decons_group_index() 中。这个问题可以用下面的代码来说明。

import numpy as np

x = np.array([2076999867579399,
              2077965839147919,
              2078931810716439,
              2079897782284959,
              2080863753853479,
              2081829725421999,
              2082795696990519,
              2083761668559039])

y = np.array([0, 0, 0, 0, 0, 0, 0 , 0])
factor = 160995261420
shape = 1

labels = (x - y) % (factor * shape) // factor

print(labels)

如果我在 python 3.7.3.final.0 中运行代码,我会得到 [0 0 0 0 0 0 0 0],这是预期的行为。但是,如果我在 python 3.9.6.final.0 中运行它,我会得到[1 1 1 1 1 1 1 1],这会触发上述类型的错误。

我想知道您是否经历过类似的事情,以及是否有任何简单而优雅的方法来解决此问题。我也不确定这是否可以被视为一个错误,因此应该在某个地方报告。

提前很多,

麦基

【问题讨论】:

你能提供一个有问题的熊猫例子吗? 不幸的是,这些数据是机密的——我必须随机化它并请求批准。整个问题可以真正简化为这个例子(我花了很多时间来隔离这个问题)。顺便说一句,labels = (x - y) % (factor * shape) // factor 直接取自函数decons_group_index()。换句话说,如果 python 3.9 产生与 python 3.7 相同的结果,那么问题就解决了。我还观察到,将聚合数据框分成两部分或删除一些列通常有助于解决问题。所以,我想知道是否涉及一些溢出...... 【参考方案1】:

好的 - 所以它原来是 numpy 中的一个错误。举报here。

麦基

【讨论】:

以上是关于Pandas 中的 grouby() 函数返回 IndexError:索引 2 超出轴 0 的范围,大小为 2的主要内容,如果未能解决你的问题,请参考以下文章

每个系列的 Pandas groupby 自定义功能

Pandas 从应用函数返回 DataFrame?

pandas 中是不是有与 excel 中的 MATCH 函数等效的函数?

向量化前瞻性函数 pandas 数据框

Python 函数返回 nan

.diff() 函数仅在 pandas 数据框中返回 NaN 值