Python 是否有方法将两个单独的Excel文件对齐,以便一个文件中的每个项目在另一个文件中都有唯一的匹配项目?代码几乎可以工作了
我有两个Excel文件需要对齐,因为一个Excel文件中的每一行在另一个Excel文件中都有一个唯一的对应行,无论它是匹配的数据点还是空白值。Excel文件大小不同,有些值匹配,有些值不匹配,但它们都是按顺序排列的 我试图通过插入空行来实现这一点。在没有匹配项的情况下插入正确数量的空行,然后继续下一个值时遇到问题。我相信我的代码非常接近于工作。代码中还包括两个修改后的Excel文件,它们作为单独的选项卡合并到一个文件中Python 是否有方法将两个单独的Excel文件对齐,以便一个文件中的每个项目在另一个文件中都有唯一的匹配项目?代码几乎可以工作了,python,excel,psse,Python,Excel,Psse,我有两个Excel文件需要对齐,因为一个Excel文件中的每一行在另一个Excel文件中都有一个唯一的对应行,无论它是匹配的数据点还是空白值。Excel文件大小不同,有些值匹配,有些值不匹配,但它们都是按顺序排列的 我试图通过插入空行来实现这一点。在没有匹配项的情况下插入正确数量的空行,然后继续下一个值时遇到问题。我相信我的代码非常接近于工作。代码中还包括两个修改后的Excel文件,它们作为单独的选项卡合并到一个文件中 j=0 iterations=100+Branch_Flow_Pre.max
j=0
iterations=100+Branch_Flow_Pre.max_row
for i in range(2, iterations):
#if str(Branch_Flow_Pre.cell(row=i, column=1).value) == "None" and str(Branch_Flow_Post.cell(row=i, column=1).value) == "None":
# print("blanks, i = ",i,"j = ",j)
# i += 1
if Branch_Flow_Pre.cell(row=i, column=2).value == Branch_Flow_Post.cell(row=i, column=2).value and Branch_Flow_Pre.cell(row=i, column=8).value == Branch_Flow_Post.cell(row=i, column=8).value:
print("match, i = ",i,"j= ",j)
i += 1
else:
j=0
while j<21:
if Branch_Flow_Pre.cell(row=i+j, column=2).value == Branch_Flow_Post.cell(row=i, column=2).value and Branch_Flow_Pre.cell(row=i+j, column=8).value == Branch_Flow_Post.cell(row=i, column=8).value:
if j!=0:
for x in range(0, j+1):
Branch_Flow_Post.insert_rows(i)
print("insert Post, x = ",x,"i = ",i,"j = ",j)
else:
print("error")
i = i+j
j=21
break
elif Branch_Flow_Pre.cell(row=i, column=2).value == Branch_Flow_Post.cell(row=i+j, column=2).value and Branch_Flow_Pre.cell(row=i, column=8).value == Branch_Flow_Post.cell(row=i+j, column=8).value:
if j!=0:
for x in range(0, j+1):
Branch_Flow_Pre.insert_rows(i)
print("insert Pre, x = ",x,"i = ",i,"j = ",j)
else:
print("error")
i = i+j
j=21
break
elif j==20:
Branch_Flow_Post.insert_rows(i)
print("break, i = ",i,"j = ",j," Insert Post")
i += 1
j = 21
break
else:
print("increment, i = ",i,"j = ",j)
j += 1
c=1
r=2
for row in Branch_Flow_Pre.values:
for v in row:
BF_Pre.cell(row=r, column=c).value = v
c += 1
c=1
r += 1
c=1
r=2
for row in Branch_Flow_Post.values:
for v in row:
BF_Post.cell(row=r, column=c).value = v
c += 1
c=1
r += 1
book3.save(outfilename)
## the rest is not code
desired output:
Input1 Input2 Output1 Output2
A 1 B 2 A 1
B 2 B 2 B 2
C 3 C 3
x y C 3 C 3
D 4 x y
D 4
D 4 D 4
Actual output:
Input1 Input2 Output1 Output2
A 1 B 2 A 1
B 2 B 2 B 2
C 3 C 3
x y C 3
D 4
D 4
D 4
C 3
x y
D 4
j=0
迭代次数=100+分支流量最大值之前的行
对于范围内的i(2,迭代):
#如果str(分支流动前单元格(行=i,列=1)。值)=“无”,str(分支流动后单元格(行=i,列=1)。值)=“无”:
#打印(“空白,i=,i,“j=,j”)
#i+=1
如果分支流动前单元格(行=i,列=2),则值==分支流动后单元格(行=i,列=2)。值和分支流动前单元格(行=i,列=8)。值==分支流动后单元格(行=i,列=8)。值:
打印(“匹配,i=,i,“j=,j”)
i+=1
其他:
j=0
虽然jI能够通过添加不允许将空单元格计算为可接受匹配的附加条件来纠正代码。
以下是我的工作脚本的图像:
此功能将在具有相似数据的两个excel选项卡之间执行比较,并对齐两个选项卡,以便每个项目在另一个选项卡中具有唯一的项目。或者,您可以将其视为一个函数,该函数将在每个选项卡的相同excel行号上放置匹配项,以便可以轻松地在两者之间进行比较 请您以.csv
格式发布您的数据文件的一些示例行好吗?BRANCH,,,,,,,,,,Conventive,MVAFLOW,AMPFLOW,RATE a/B,%FLOW 81,Plenstgrov,69185,MIDWAY,69,1,基本情况,-16.34,15.96,15.00106.38 265,ENERGY,69269,ENERGY,69,1,基本情况,-18.66,19.71,15.00131.42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1900,Comchpkw5345150111,CPSES单位1,22,2,单台1900-150111(1),-1223.811223.81781.00156.70,,,,,,,,,,,1900,COMCHPKW_5345150111,CPSES_机组1,22,1,单台1900-150111(2),-1224.111224.11781.00156.74,,,,,,,,,,,,1900,COMCHPKW_5345150112,CPSES_机组2,2,单台1900-150112(1),-1234.551234.55781.00158.078分支,中途岛,69,1,基本情况,-16.47,16.08,15.00107.22 265,ENERGYSW,69269,ENERGY,69,1,基本情况,-18.66,19.71,15.00131.43,,,,,,,,,,,,,,,2093,HERTG_81382090,HERTG_D,13,1,单2104-2106(1),-77.06,77.06,60.00128.43