python - 在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 很陌生,因此在上述尝试中可能犯了一些愚蠢的错误。
解决方案
并行循环遍历两个字典。
我找不到适合您问题的副本。假设两个字典具有相同的键,例如{'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
.
推荐阅读
- react-native - React Native Expo 发布
- c++ - 是 std::is_standard_layout_v
如果 std::is_trivial_v 则始终为真 是真的? - html - HTML 上传表单无法将 RAW 格式识别为图像,而是使用“application/octet-stream”。如何验证?
- arrays - 如何确定每一天的行的日期?
- php - 如何从 PHP IMAP 服务器获取特定的电子邮件 ID 电子邮件和对话
- python - Seaborn distplot() 不会在 y 轴上显示频率
- node.js - 在 VueJS 中全局配置 vue-socket.io 时如何监听传入请求
- php - 如何使用表单验证测试 Laravel 媒体上传
- java - Corda RPC:从 RPC 返回的热可观察对象从未被订阅
- python - 如何终止使用 python 子进程启动的远程进程?