74006


やりたいこと：  
下記の2つのcsvファイルを比較して、両ファイル内の差分を抽出し別のファイルにデータを書き込みたいです。

csvデータ①

[code]

    A  B      C  
    1 アメリカ   ○
    2 カナダ　　×
    3 日本     △
    4 イタリア　 ○
    5 イギリス　 □
    6 メキシコ  空白
    7　空白　　空白    
    
[/code]

csvデータ②

[code]

    A  B      C  
    1 アメリカ   ○
    2 カナダ　　□　→”×”→”□”変わった部分ですが、”□”は除外
    3 日本     ○ →”△”→”○”変わった部分
    4 イタリア　 ○ 
    5 イギリス　 ×→”□”→”✖️”変わった部分
    6 メキシコ　空白
    7　空白　　空白
    
[/code]

抽出したいデータは”○”と”✖️”で変わった時だけです。  
＊ヘッダ付きと改行されている形式で下記のように表示したいです。

[code]

    A  B      C  
    3 日本     ○
    5 イギリス　 ×
    
[/code]

こちらのコードを記載しましたが下記のように表示されます。

[code]

    import csv
    import pandas as pd
    
    df1 = pd.read_csv('test1.csv',encoding='utf_8_sig')
    df2 = pd.read_csv('test2.csv',encoding='utf_8_sig')
    
    ret = df2[~df2.A.isin(df1.A)]
    ret.to_csv('test3.csv', index=None)
    
    print(ret.to_csv)
    
[/code]

出力  
ヘッダだけしか表示されないです。

[code]

    <bound method NDFrame.to_csv of Empty DataFrame
    Columns: [A, B, C]
    Index: []>
    PS C:\Users\test\Documents\test>
    
[/code]

わかる方いらっしゃいましたらご教示願います。  
お手数ですが、宜しくお願いいたします。


CC BY-SA 4.0
2021-02-11T12:28:42.403
73935
2021-02-15T03:20:02.783
2021-02-11T15:26:50.600
7290
18859
question
python csv
CSVのファイルを比較し、差分データを抽出する方法


Aの値が２つのファイルで一対一に対応している前提で、該当しそうな条件で例として書いてみました。  
条件を適宜調整してください。ご参考まで。

[code]

    #!/usr/bin/env python3
    #-*- coding: utf-8 -*-↲
    
    import csv
    import pandas as pd
    
    df1 = pd.read_csv('test1.csv')
    df2 = pd.read_csv('test2.csv')
    
    # 1.今回×に変わったところ
    df2_state = df2['C'].isin(['×'])
    # もともと○、□だったところ
    df1_state = df1['C'].isin(['○','□'])
    # 両方を満たすケース
    f1_state= (df1_state & df2_state)
    
    
    # 2.今回○に変わったところ
    df2_state = df2['C'].isin(['○'])
    # もともと△、×、□、空白だったところ
    df1_state = df1['C'].isin(['△','×','空白','□'])
    # 両方を満たすケース
    f2_state= (df1_state & df2_state)
    
    # 1.2.それぞれの条件を満たすもの
    final_state = ( f1_state | f2_state )
    
    # 最終的にほしいDetaframe
    final_answer = df2[final_state]
    
    final_answer.to_csv('test3.csv', index=None)
    
[/code]


CC BY-SA 4.0
2021-02-15T03:20:02.783
74006
2021-02-15T03:20:02.783
43957
73935
answer