LoginSignup
16
13

More than 1 year has passed since last update.

【Pandas】両者のDataframeの差分を確認したい!

Posted at

同じカラムだけど、データ量が違う2つのdataframeがあったとする。

  • dataframe 1
index a b c
0 1 2 3
1 4 5 6
  • dataframe 2
index a b c
0 1 2 3
1 4 5 6
2 5 6 7

データ量が同じであれば、compare関数を使うことができるが、
両者のデータ量が異なる場合、compare関数を利用すると
エラーとなってしまう。

ValueError: Can only compare identically-labeled DataFrame objects

そこで、両者のどこに差があるのかを確認する方法を紹介する。

差分の確認方法

以下のように、merge関数とquery関数をくみあわせればいい。

pd.merge(df1,df2, on=["両者を紐付けるカラム名1", "両者を紐付けるカラム名2"], how ="outer", indicator=True).query(f'_merge != "both"')

上の式は何をやっているかというと、
両者のDataFrameを外部結合する。merge関数のindicatorをTrueにしておくと、

  • 両者に同じデータがある部分には, both
  • 右のDataFrameにだけデータがある場合は, right_only
  • 左のDataFrameにだけデータがある場合は, left_only

が記載される。

このデータフレームからquery関数を利用して、両者同じデータがない部分のデータだけを抜き出してくる

先程の上の2つのdataframeでみてみる。

import pandas as pd
df1 = pd.DataFrame({'a': [1, 4], 'b': [2, 5], 'c': [3, 6]})
df2 = pd.DataFrame({'a': [1, 4, 5], 'b': [2, 5,6], 'c': [3, 6, 7]})

pd.merge(df1,df2, on=["a","b","c"],how='outer',indicator=True)

結果はいかのようになり、右側つまり、dataframe2にだけ5,6,7のデータが余分に存在することがわかる。

index a b c _merge
2 5 6 7 right_only

まとめ

両者のdataframe(df1, df2)の差分確認方法

pd.merge(df1,df2, on=["両者を紐付けるカラム名1", "両者を紐付けるカラム名2"], how ="outer", indicator=True).query(f'_merge != "both"')

最後に

今回は、両者のデータフレームの差分の確認方法について紹介しました。
なにか疑問点等ありましたら、コメントお待ちしております。

16
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
13