使用带有多个选项卡的pandas比较两个excel文件的差异

2skhul33  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(187)

我在网上找到了这个很好的脚本,它可以很好地比较2个Excel工作表之间的差异,但有一个问题-如果Excel文件在给定的.xlsx中有多个工作表,它就不起作用:

import pandas as pd
import numpy as np

df1 = pd.read_excel('file1.xlsx')
df2 = pd.read_excel('file2.xlsx')

df1.equals(df2)

comparison_values = df1.values == df2.values

print(comparison_values)

rows, cols = np.where(comparison_values == False)
for item in zip(rows,cols):
    df1.iloc[item[0], item[1]] = '{} --> {}'.format(df1.iloc[item[0], item[1]], df2.iloc[item[0], item[1]])

df1.to_excel('./Excel_diff.xlsx', index = False, header = True)

它的工作真的很好,我需要它,除了它不工作时,我有多个工作表在每个。xlsx -它只比较第一张文件。任何想法如何改变上面的脚本,使它比较文件中的所有工作表?谢谢

goqiplq2

goqiplq21#

正如@StevenS在评论部分所说的,你可以使用sheet_name=None选项来获取一个包含输入文件中所有工作表和 Dataframe 的字典。然后你需要决定如何区分输出文件中的每个工作表。在下面的例子中,我为file1.xlsx输入中的每个工作表在输出差异文件中放置了一个工作表。

import pandas as pd
import numpy as np

df1 = pd.read_excel('file1.xlsx', sheet_name=None)
df2 = pd.read_excel('file2.xlsx', sheet_name=None)

with ExcelWriter('./Excel_diff.xlsx') as writer:
    for sheet,df1 in xl_1.items():
        # check if sheet is in the other Excel file
        if sheet in xl_2:
            df2 = xl_2[sheet]
            comparison_values = df1.values == df2.values
            
            print(comparison_values)
            
            rows, cols = np.where(comparison_values == False)
            for item in zip(rows,cols):
                df1.iloc[item[0], item[1]] = '{} --> {}'.format(df1.iloc[item[0], item[1]], df2.iloc[item[0], item[1]])

            df1.to_excel(writer, sheet_name=sheet, index=False, header=True)

相关问题