循环两个数据帧并在循环中按列打印

2024-10-02 20:32:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,具有相同的列名、索引和大小。我想创建一个散点图,将一个数据帧列与另一个具有相同标题的数据帧列进行比较。当我尝试下面的代码时,只有sim.columns在循环,而obs.columns只打印第一列,不循环。所以我得到的是每个模拟柱相对于第一个obs柱的散点图。我不确定这个循环出了什么问题。谢谢你的帮助

    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 colsim in sim.columns:
    for colobs in obs.columns:
        axes = plt.gca()
        axes.set_xlim([1,630])
        plt.scatter(sim.index, sim[colsim])
        plt.scatter(obs.index, obs[colobs])

        plt.xlabel('Stress Period')
        plt.ylabel('groundwater elevation(m)')
        plt.title(str(colsim))
        plt.savefig(os.path.join(outFold, str(colsim)+'.pdf')) 
        plt.close()
        break

Tags: columnscsv数据truereadindexpltsim
2条回答

这里不应该使用嵌套循环,它不是您想要实现的。相反,您希望在一个循环中同时循环两个数据帧。我可以想出两种方法来实现这一点:

  1. 合并数据帧并在一个循环中循环通过合并的数据帧
  2. 引入一个计数器变量,该变量可用作并行遍历两个数据帧的索引

而不是双for循环:

for colsim in sim.columns:
    for colobs in obs.columns:
        ...

只需使用zip

for colsim, colobs in zip(sim.columns, obs.columns):
    ...

不知道你想做什么是什么意思,但如果这段代码不起作用,请尝试删除break,然后它应该会起作用,但如果它在不删除中断的情况下起作用,请保留它

相关问题 更多 >