同じカラムだけど、データ量が違う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"')
最後に
今回は、両者のデータフレームの差分の確認方法について紹介しました。
なにか疑問点等ありましたら、コメントお待ちしております。