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しました。


参考

以上です。

コメント