You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在DataFrame查询中遭遇‘Duplicate axis’重索引错误求助

解决Pandas筛选时的「Getting reindex from a duplicate axis」错误

这个报错本质上是你的DataFrame存在重复的行索引,当你用where或者布尔索引筛选时,Pandas内部要做重新索引的操作,但重复索引会让这个操作冲突,所以就抛出了这个错误。我给你一步步拆解解决办法:

第一步:先确认问题根源

先运行这条代码,检查你的索引是不是真的有重复:

print(df.index.duplicated().any())

如果输出是True,那确实是重复索引在搞鬼,接下来就可以用下面的方法解决。

第二步:根据需求选解决方案

方案1:重置索引(最简单通用)

如果原索引对你来说不重要,直接把重复索引换成默认的连续整数索引,之后再筛选就不会有问题了:

# 重置索引,drop=True会直接丢弃原索引
df = df.reset_index(drop=True)
# 现在再执行筛选
only_gold = df[df['Gold'] > 0]
only_gold.head()

要是你还想保留原索引的内容,可以把drop=False,原索引会变成一个新列index:

df = df.reset_index(drop=False)
only_gold = df[df['Gold'] > 0]

方案2:保留原索引但处理重复项

如果你必须保留原索引的结构,可以先清理重复的索引行:

# 保留每个重复索引的第一行,删除后面的重复行
df = df[~df.index.duplicated(keep='first')]
# 或者保留最后一行,把keep改成'last'
# df = df[~df.index.duplicated(keep='last')]

# 之后再筛选
only_gold = df[df['Gold'] > 0]

要是不想删行,还可以给重复的索引加后缀区分:

from itertools import groupby

new_index = []
for idx, group in groupby(df.index):
    count = 0
    for _ in group:
        # 第一个重复项保持原索引,后面的加_0、_1后缀
        new_index.append(f"{idx}_{count}" if count > 0 else idx)
        count += 1

df.index = new_index
# 现在筛选就不会报错了
only_gold = df[df['Gold'] > 0]

方案3:用loc明确筛选(快速尝试)

有时候换用loc直接指定行和列,能绕过重新索引的问题,可以先试试:

only_gold = df.loc[df['Gold'] > 0, :]
only_gold.head()

内容的提问来源于stack exchange,提问作者Nafis2204

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:07:32