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 环境中一切都运行良好。在这种特殊情况下,错误实际上意味着在某个列中有两个唯一值(例如 a
和 b
),但相关的 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的主要内容,如果未能解决你的问题,请参考以下文章