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

循环调用sns.relplot报cannot reindex from a duplicate axis错误求助

错误根因

你代码的核心问题出在循环对象和y参数的传值逻辑:

  • 你的循环是直接遍历df["x"]、df["y"]、df["z"]三个Series对象,而非列名字符串。当你把整个Series传给sns.relplot的y参数时,seaborn会尝试将该Series和你传入的data(reset_index后的临时DataFrame)做索引对齐:你原df因为将Date设为索引存在重复索引值,哪怕你给data做了reset_index,外部传入的y参数对应的Series仍然保留了原df的重复索引,二者索引无法对齐就会触发重索引报错。
  • 附带问题:你savefig中的{i}.png写法也无法生效,此时i是Series对象,不能直接作为文件名使用。

解决方案

直接修改循环逻辑为遍历列名,让seaborn从reset后的临时DataFrame中直接取数即可,不需要修改原df的索引结构,不影响你后续用Date作为索引做计算:

# 遍历需要绘图的列名字符串
for col in ["x", "y", "z"]:
    sns.relplot(
        data=df.reset_index(),
        x="Date",
        y=col,  # 传入列名,seaborn直接从参数data中取对应列,无索引对齐问题
        hue="Share",
        kind="line",
        height=10,
        aspect=1.7
    ).savefig(f"{col}.png")  # 用f-string格式化,以列名作为保存文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:06:03