在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
相关产品推荐
相关产品推荐

