1. ホーム
  2. スクリプト・コラム
  3. パイソン

[解決済み】Pandasの「同一ラベルのDataFrameオブジェクトしか比較できない」エラーについて

2022-01-12 02:09:54

質問

以下は、2つのデータフレーム(uat, prod)に読み込まれた2つのファイルの出力をPandasで比較したものです。

uat = uat[['Customer Number','Product']]
prod = prod[['Customer Number','Product']]
print uat['Customer Number'] == prod['Customer Number']
print uat['Product'] == prod['Product']
print uat == prod

The first two match exactly:
74357    True
74356    True
Name: Customer Number, dtype: bool
74357    True
74356    True
Name: Product, dtype: bool

最初の2つはうまく比較できたのですが、3つ目の印刷でエラーが発生しました。

Can only compare identically-labeled DataFrame objects. 

解決するには?

これはPandas 0.19まではDataFrameにのみ適用され、Seriesには適用されなかったものです。

In [1]: df1 = pd.DataFrame([[1, 2], [3, 4]])

In [2]: df2 = pd.DataFrame([[3, 4], [1, 2]], index=[1, 0])

In [3]: df1 == df2
Exception: Can only compare identically-labeled DataFrame objects

一つの解決策として インデックスのソート を先にする(注。 一部の関数では、ソートされたインデックスを必要とします。 ):

In [4]: df2.sort_index(inplace=True)

In [5]: df1 == df2
Out[5]: 
      0     1
0  True  True
1  True  True

==

sort_index(axis=1)

注:これはまだ発生する可能性があります(インデックス/カラムがソート後に同じラベルでない場合)。