Python|エクセルファイルの差分を確認する

Python
田中太郎
田中太郎

PythonでExcelファイルの差分を取ります。

行ヘッダ、列ヘッダ、行列ヘッダがある場合の3種類作成しました。

仕様

使用するパッケージ:pandas

入力:差分を取りたいエクセルファイルAとB

出力:差分のある行 or 列 or セル

行ヘッダがある場合のサンプルコード

入力となるエクセルファイルです

sampleA.xlsx
sampleB.xlsx
sample.py
import pandas as pd

def create_line_header_dict(input_excel):
    df = pd.read_excel(input_excel, header=None, index_col=0)
    return df.fillna("NA").T.to_dict(orient="list")

file_a = "sampleA.xlsx"
file_b = "sampleB.xlsx"
a = create_line_header_dict(file_a)
b = create_line_header_dict(file_b)

line = 0
for n, m in zip(a.values(), b.values()):
    line+=1
    if n != m:
        print("{0} {1}".format(file_a, file_b))
        print("({0}) {1} {2}".format(line, n, m))
出力
sampleA.xlsx sampleB.xlsx
(4) ['A', 'B', 'NA', 'NA', 'NA'] ['A', 'F', 'NA', 'NA', 'NA']

列ヘッダがある場合のサンプルコード

入力となるエクセルファイルです

sampleA.xlsx
sampleB.xlsx
sample.py
import pandas as pd

def create_column_header_dict(input_excel):
    df = pd.read_excel(input_excel)
    return df.fillna("NA").to_dict(orient="list")

file_a = "sampleA.xlsx"
file_b = "sampleB.xlsx"
a = create_column_header_dict(file_a)
b = create_column_header_dict(file_b)

col = 0
for n, m in zip(a.values(), b.values()):
    col+=1
    if n != m:
        print("{0} {1}".format(file_a, file_b))
        print("({0}) {1} {2}".format(col, n, m))
出力
sampleA.xlsx sampleB.xlsx
(3) ['A', 'B', 'C', 'NA', 'NA'] ['A', 'B', 'E', 'NA', 'NA']

行列ヘッダがある場合のサンプルコード

入力となるエクセルファイルです

sampleA.xlsx
sampleB.xlsx
sample.py
import pandas as pd

def create_line_and_column_header_dict(input_excel):
    df = pd.read_excel(input_excel, index_col=0)
    return df.fillna("NA").to_dict(orient="index")

file_a = "sampleA.xlsx"
file_b = "sampleB.xlsx"
a = create_line_and_column_header_dict(file_a)
b = create_line_and_column_header_dict(file_b)

line = 0
for n, m in zip(a.values(), b.values()):
    line+=1
    col = 0
    for l, o in zip(n.values(), m.values()):
        col+=1
        if l != o:
            print("{0} {1}".format(file_a, file_b))
            print("({0},{1}) {2} {3}".format(line, col, l, o))
出力
sampleA.xlsx sampleB.xlsx
(3,3) C E

まとめ

Pythonでエクセルの差分を取るスクリプトを作成しました

コメント

タイトルとURLをコピーしました