首页 > 解决方案 > 在python中与连接的输出并行运行2个循环

问题描述

我有两个 excel 文件,其中包含相同数量的行、列和工作表的相互关联的数据集。我需要运行两个循环以默认顺序读取两个 excel 文件的工作表,然后合并两个工作表的查找以创建堆叠图。

更详细地说:目的是在两个 excel 工作表中读取 sheet1,然后对原始数据进行插值以创建堆叠图,其中涉及来自各个工作表数据的等高线图和使用来自两个工作表的数据的相关线图. 并且由于两个excel文件中存在多张表,因此需要对每张表通过并行循环进行操作。两个 excel 文件中的每个相应工作表都会生成一个堆叠图。

我尝试了以下但未能成功:

import pandas as pd
import numpy as np
import scipy.interpolate
import matplotlib.pyplot as plt

loc1 = r'E:\Python\Field_2\80_IP18p2.xlsx'
load1 = pd.read_excel(loc1,sheet_name = None, header=None)

loc2 = r'E:\Python\Field_2\80_OP18p2.xlsx'
load2 = pd.read_excel(loc2,sheet_name = None, header=None)

nar=list(load.keys())
numR = len(nar)

#since numR is same for both

while numR in ax:
    
    #first loop
    for k in load1:
        dem=load1[k]
        x_c=np.array(dem[0])
        y_c=np.array(dem[1])
        z_c=np.array(dem[2])

        X,Y=np.meshgrid(x_c,y_c)
        rbf = scipy.interpolate.Rbf(x_c, y_c, z_c, function='linear')
        Z=rbf(X,Y)
        
    #second loop
    for m in load2:
        demo=load2[m]
        x_co=np.array(demo[0])
        y_co=np.array(demo[1])
        z_co=np.array(demo[2])

        Xo,Yo=np.meshgrid(x_co,y_co)
        rbf = scipy.interpolate.Rbf(x_co, y_co, z_co, function='linear')
        Zo=rbf(X,Y)
    
    
    fig, ax = plt.subplots(nrows=3, ncols=1, sharex=True, 
                         figsize=(12*3,4*3))
    #first stacked plot 
    cline=ax[0].tricontour(X,Y,Z, color='k')
    ax[0].clabel(cline, colors = 'k', fmt = '%2.1f', fontsize=7)       
    con=ax[0].tricontourf(X,Y,Z, cmap='rainbow',extend='both')
    plt.colorbar(con, shrink=.5)
    ax[0].set_aspect('equal')
   
    #second stacked plot
    clineo=ax[1].tricontour(Xo,Yo,Zo, color='k')
    ax[1].clabel(clineo, colors = 'k', fmt = '%2.1f', fontsize=7)       
    cono=ax[1].tricontourf(Xo,Yo,Zo, cmap='rainbow',extend='both')
    plt.colorbar(cono, shrink=.5)
    ax[1].set_aspect('equal')
    
    #third stacked plot
    ax[2].plot(x_c,y_c)
    ax[2].plot(x_co,y_co)

上面的代码创建了带有三个堆叠框的空白图。

根据需要创建并行循环的任何帮助将对我非常有帮助,将不胜感激。而且,我想提一下,我对 python 很陌生,因此在上述尝试中可能犯了一些愚蠢的错误。

标签: pythonexcelloops

解决方案


并行循环遍历两个字典。


我找不到适合您问题的副本。假设两个字典具有相同的键,例如{'sheet1':sheet1_dataframe}- 使用一个字典中的键来访问另一个字典中的值。

for key, df1 in load1.items():
    df2 = load2[key]
    # do all your processing

如果两个文件的 excel 工作表名称不同,但您想将一个工作表的第一个工作表与另一个工作表的第一个工作表配对,则在读取文件时为工作表名称指定一个整数列表。结果字典将具有相同的键。pandas.read_excel

例如,一个包含三个名为'foo''bar'、的工作表的 excel 文件'baz'

In [106]: q = pd.read_excel('book1.xlsx', sheetname=[0,1,2])

In [107]: for key,value in q.items():
     ...:     print(f'key:{key}')
     ...:     print(value)
     ...:     print('.......')
     ...:     
key:0
   a  b
0  1  2
1  1  2
.......
key:1
   a  b
0  1  2
1  2  2
2  3  2
.......
key:2
   a  b  c
0  1  2  3
1  6  5  4
.......

在较新版本的 Pandas 中,参数是sheet_name而不是sheetname.


推荐阅读