Python+ChatGPTでExcel差分チェックを秒速で自動化した話
背景
仕事で「2つのExcelファイル(あるいはシート)に差異があるか確認してほしい」というタスクが発生しました。
一見シンプルですが、実際に人力でやるとなると地獄です。
数百行 × 数十列のシートを目で追って比較するなんて、まさに修行僧モード。終わる頃には悟りが開けそうです。
そこで私はこう思いました。
「これは人間の仕事じゃない。Pythonにやらせよう」
そして頼れる相棒 ChatGPT に相談しました。
実装(ChatGPTと一緒に数分で完成)
ChatGPTからのアドバイスを元に、Pythonでサクッと比較スクリプトを書きました。
import pandas as pd
file1 = "file1.xlsx"
file2 = "file2.xlsx"
sheet = 0
df1 = pd.read_excel(file1, sheet_name=sheet)
df2 = pd.read_excel(file2, sheet_name=sheet)
# 行列を揃える
df1, df2 = df1.align(df2)
# NaN を同じとみなすために fillna して比較
diff_mask = (df1.fillna("__NA__") != df2.fillna("__NA__"))
rows, cols = diff_mask.to_numpy().nonzero()
if len(rows) == 0:
print("✅ 差異はありません")
else:
print("❌ 差異があります。差異セルの位置:")
for r, c in zip(rows, cols):
print(f"行={r+1}, 列={df1.columns[c]} : {df1.iat[r, c]} vs {df2.iat[r, c]}")
トラブル解消(NaN vs NaN 問題も即解決)
最初に試したときは「NaN と NaN」まで「差異あり」と出てしまいました。
そこで ChatGPT に相談したところ…
「NaN同士は一致扱いにしたいなら fillna("NA") してから比較すると良いですよ」
と言われ、即解決。数秒で詰まりポイントが消えました。
出力例
例えば、こんな結果が出ます👇
❌ 差異があります。差異セルの位置:
行=10, 列=金額 : 100 vs 120
行=15, 列=ステータス : 承認済み vs 未承認
余計な出力がなく、本当に違うところだけがわかります。
まさに「お前が見たいのはこれだろ?」という感じ。
学びポイント
-
NaNの扱いは要注意
→ データ比較では「空欄同士を同じとする」か「違うとする」かを決めるのが大事。 -
人力でやると膨大な作業も、プログラムを使えば数分で終わる。
-
**ChatGPTを相談相手にすると超速で前進できる。**独学なら半日悩むところも、即フィードバックで解決。
まとめ
もし今回のタスクを人力でやっていたら、丸1日消えていたと思います。
でも ChatGPT と Python の力を借りれば、発生 → 実装 → 完了まで10分足らず。
効率化できただけでなく「なるほど、NaNの扱いはこうすればいいのか」と、ちゃんと学びもありました。
次に「Excelファイル比べて!」と言われても、もう怖くありません 。
おまけ
この記事もChatGPTにお願いして書いてみました。😎
Discussion