Python pandas で 2つのCSVの比較をするため、以下のようなスクリプトを書いてみました。
pandas の merge関数を使って、csvの差分を検知します。
merge関数を使う
pandas の merge 関数を使って、csvの差分を検知します。
- csv_diff.py
# -*- coding: utf-8 - import pandas as pd def execute(): df1 = pd.read_csv('data/before.csv') df2 = pd.read_csv('data/after.csv') diff_df = dataframe_difference(df1, df2) diff_df.to_csv('data/diff.csv') def dataframe_difference(df1, df2, which=None): """Find rows which are different between two DataFrames.""" comparison_df = df1.merge(df2, indicator=True, how='outer') if which is None: diff_df = comparison_df[comparison_df['_merge'] != 'both'] else: diff_df = comparison_df[comparison_df['_merge'] == which] return diff_df # return comparison_df if __name__ == '__main__': execute()
UCI Machine Learning Repository: Wine Data Set のデータセットを使って、一部変更したデータを比較してみました。
変更は検知されるのですが、個人的な期待通りに、変更は検知できる場合とできない場合がありました。
csv には重複行が含まれいて、重複を排除するetc が必要なのかもしれません。
- diff.csv
,fixed acidity,volatile acidity,citric acid,residual sugar,chlorides,free sulfur dioxide,total sulfur dioxide,density,pH,sulphates,alcohol,quality,_merge 5,7.8,0.76,0.04,2.3,0.092,15.0,54.0,0.997,3.26,0.65,9.8,5,left_only 2127,7.8,0.76,0.04,2.3,0.092,1955454545454.0,54.0,0.997,3.26,0.65,9.8,5,right_only
スクリプトと、動作確認に使ったCSVファイル
Gist に UPしました。
参考
-
CSVファイルに特化した Diff(差分比較)ツール「CDiff」 | StartHome
Windows10 のフリーソフトで別にスクリプトを書かなくても、実現はできそうです。 -
aswinkarthik/csvdiff: A fast diff tool for comparing csv files
Goで書かれたコマンドラインのCSV比較ツール -
CSV diff - Online compare tool
オンラインのCSV比較ツール -
テーブル内データのdiff - Qiita
SQLで同一レイアウトのテーブルデータを比較する -
[python] difflibを使って、2つのCSV的な構造の変更箇所を取得する | Reincarnation+
Ptython difflibを使って、CSVを比較する -
csv-diff · PyPI
Pythonで書かれたコマンドラインのCSV比較ツール -
Comparing Rows Between Two Pandas DataFrames - Hackers and Slackers
Python スクリプトを作る際に参考にした記事。 -
Pandas/Python: How to concatenate two dataframes without duplicates? - Stack Overflow
pandas の concat を使って、2つのdataframeを比較する。 -
pandas.DataFrame, Seriesの重複した行を抽出・削除 | note.nkmk.me
pandas group by の使い方の説明。
以上です。
コメント