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

同列名双DataFrame按列循环绘制散点图时obs列不循环问题

问题根因

代码内层循环末尾的break语句是错误根源:每次内层for colobs in obs.columns第一次执行(colobs取到obs第一列)后,break会直接终止内层循环,因此永远只会用到obs的第一列数据。
同时你的需求是同列名配对绘图,不需要写双重循环,双重循环反而会引发列错配问题,直接单层遍历列名取对应同名列即可。

修正后代码

import pandas as pd
import matplotlib.pyplot as plt
import os

obs = pd.read_csv(obsFile)
obs.rename(columns={obs.columns[0]: "SP"}, inplace=True)
sim = pd.read_csv(simFile)
sim.rename(columns={sim.columns[0]: "SP"}, inplace=True)

sim = sim.set_index("SP")
obs = obs.set_index("SP")

# 单层循环遍历列名,两个表列名一致直接取对应列即可
for col in sim.columns:
    axes = plt.gca()
    axes.set_xlim([1, 630])
    # 新增label参数区分序列
    plt.scatter(sim.index, sim[col], label='模拟值')
    plt.scatter(obs.index, obs[col], label='观测值')
    # 显示图例避免混淆序列
    plt.legend()

    plt.xlabel('Stress Period')
    plt.ylabel('groundwater elevation(m)')
    plt.title(col)
    plt.savefig(os.path.join(outFold, f'{col}.pdf')) 
    plt.close()

优化说明

  • 新增图例标识,可直接区分模拟值和观测值散点序列
  • 用f-string简化文件名拼接逻辑,可读性更高
  • 删除冗余的双重循环和错误break语句,执行效率更高,不会出现列错配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 13:39:01