1. compareについて少し深堀りした記事
後日、深堀りした記事を公開しました。
Example 1. @ryamashina.com
2. DataFrameの比較
2つのデータフレームが等しいのかどうか確認したいことがある。
簡単そうだけれどもいざやってみようとするとどう対応してよいか迷う。
今回はequalsとcompareを使用した対応方法を整理する。
3. テストデータ作成
微妙に違う2つのデータフレームを作成します。
data.py
df1 = pd.DataFrame(
dict(
a=[2, 4, 6],
b=[1, 2, 3],
c=[3, 6, 9],
)
)
df2 = pd.DataFrame(
dict(
a=[2, 40, 6],
b=[10, 2, 3],
c=[3, 6, 9],
)
)
4. 2つのデータフレームが一致しているか?
equalsを使用する
equals.py
df1.equals(df2)
# False
5. 値の違うindexとcolumnを特定する
compareを使用する
compare.py
df_comp = df1.compare(df2)
df_comp
output
a b
self other self other
0 NaN NaN 1.0 10.0
1 4.0 40.0 NaN NaN
5.1. compareの結果から差のある列を特定する
compareの結果が少し扱いづらいので少し工夫する
columns.py
diff_col = df_comp.columns.droplevel(1).unique()
diff_col
output
Index(['a', 'b'], dtype='object')
5.2. compareの結果から列を指定して違いのある行を特定する
これも少し工夫する
rows_a.py
df_comp.a.dropna()
output
self other
1 4.0 40.0
rows_b.py
df_comp.b.dropna()
output
self other
0 1.0 10.0
6. すべてのコード
rows_b.py
import pandas as pd
df1 = pd.DataFrame(
dict(
a=[2, 4, 6],
b=[1, 2, 3],
c=[3, 6, 9],
)
)
df2 = pd.DataFrame(
dict(
a=[2, 40, 6],
b=[10, 2, 3],
c=[3, 6, 9],
)
)
df1.equals(df2)
df_comp = df1.compare(df2)
diff_col = df_comp.columns.droplevel(1).unique()
diff_col
df_comp.a.dropna()
df_comp.b.dropna()