python - Pandas 在重复 DataFrame.reset_index() 上崩溃

标签 python pandas

这里有一个非常奇怪的错误:我正在使用 pandas 来合并几个数据框。作为合并的一部分,我必须多次调用 reset_index。但是当我这样做时,它会在第二次或第三次使用 reset_index 时意外崩溃。

这是重现错误的最少代码:

import pandas
A = pandas.DataFrame({
    'val' :  ['aaaaa', 'acaca', 'ddddd', 'zzzzz'],
    'extra' : range(10,14),
})
A = A.reset_index()
A = A.reset_index()
A = A.reset_index()

这是回溯的相关部分:

....
    A = A.reset_index()
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 2393, in reset_index
    new_obj.insert(0, name, _maybe_cast(self.index.values))
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 1787, in insert
    self._data.insert(loc, column, value)
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/internals.py", line 893, in insert
    raise Exception('cannot insert %s, already exists' % item)
Exception: cannot insert level_0, already exists

知道这里出了什么问题吗?我该如何解决?

最佳答案

检查 frame.py,看起来 pandas 试图插入列“index”或“level_0”。如果其中一个/两个(??)已经被占用,那么它会抛出错误。

幸运的是,有一个“丢弃”选项。 AFAICT,这会删除具有相同名称的现有索引并将其替换为新的重置索引。如果你有一个名为“index”的列,这可能会给你带来麻烦,但我认为否则你没问题。

“固定”代码:

import pandas
A = pandas.DataFrame({
    'val' :  ['aaaaa', 'acaca', 'ddddd', 'zzzzz'],
    'extra' : range(10,14),
})
A = A.reset_index(drop=True)
A = A.reset_index(drop=True)
A = A.reset_index(drop=True)

关于python - Pandas 在重复 DataFrame.reset_index() 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12203901/

相关文章:

python - 向异步上下文管理器添加超时

python - 使用 zip 文件从 URL 中提取数据时出现属性错误

python - 如何允许长时间运行的 python 函数在其父函数终止后继续执行?

python - 递归搜索多重嵌套列表并返回整数 : Python

python - 每个月在 Pandas 中返回最后一个日期和值

Python Pandas 匹配两个索引和列的值

python - 从嵌套字典创建多列 Pandas DataFrame

python - Pandas Lambda 函数 : attribute error 'occurred at index 0'

python - python中的热图表示给定矩形区域中的(x,y)坐标

python - 当数据帧大小超过 100 行时,Pandas dataframe query() 会抛出错误