74263


**やりたいこと**  
2つのcsvファイルを比較して、両ファイル内の差分を抽出し別のファイルにデータを書き込みたいですが、  
下記のエラーが発生します。indexエラーだと思われます。

**csvデータ① (A,B,Cカンマ区切り)**

[code]

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

**csvデータ② (A,B,Cカンマ区切り)**

[code]

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

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

[code]

    A  B      C  
    3 日本     ○
    5 イギリス　 ×
    9  チリ    ○
    
[/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')
    
    #ファイルの比較
    df3 = df2.iloc[df1.compare(df2).sort_index(inplace=True)]
    
    #特定の文字を検索
    df_h = df3[df3["C"].str.contains("○|✖️",na=False)]
    
    #Csvファイル書き込み
    df_h.to_csv("test.csv",encoding='utf_8_sig',index=False)
    
    
[/code]

**エラー内容**

[code]

    Traceback (most recent call last):
      File "c:/Users/test/Documents/compare.py", line 5, in <module>
        df3 = df2.iloc[df1.compare(df2).index]
      File "C:\Users\test\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\frame.py", line 5995, in compare
        return super().compare(
      File "C:\Users\test\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\generic.py", line 8398, in compare
        mask = ~((self == other) | (self.isna() & other.isna()))
      File "C:\Users\test\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\ops\__init__.py", line 705, in f
        self, other = _align_method_FRAME(self, other, axis, level=None, flex=False)
      File "C:\Users\test\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\ops\__init__.py", line 510, in _align_method_FRAME
        raise ValueError(
    ValueError: Can only compare identically-labeled DataFrame objects
    
[/code]

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


CC BY-SA 4.0
2021-02-25T00:54:39.047
74260
2021-02-25T04:07:19.130
2021-02-25T04:07:19.130
32986
18859
question
python csv
CSVファイルのidentically-labeled エラーの解決方法は？


`df1` と `df2` は行数が異なるので当該のエラーが発生しています。ですので `df1` の行を切り詰めて `df2` と比較した後、その結果と
`df1` の残りの部分を結合します。

[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')
    
    df3 = pd.concat([df2.iloc[df2.compare(df1[:len(df2)]).index], df1[len(df2):]])
    df_h = df3[df3["C"].str.contains("○|×",na=False)].reset_index(drop=True)
    df_h.to_csv("test.csv",encoding='utf_8_sig',index=False)
    
    pd.set_option('display.unicode.east_asian_width', True)
    print(df_h)
    =>
       A         B  C
    0  3       日本  ○
    1  5    イギリス　×
    2  9       チリ  ○
    
[/code]


CC BY-SA 4.0
2021-02-25T02:21:58.763
74263
2021-02-25T02:21:58.763
74260
answer