前提・実現したいこと
pandasのDataFrameのCompareが何をしているのかを知りたい。
pandas.DataFrame.compare
これを読むと、差分を出力してくれる。という事はわかります。
ただ、差があるとはどうやって判定しているのかが分りません。
pandasからSource RepositoryをクリックしてGithubへ行って、DataFrameのクラスの定義から
compareのメソッドの定義を見てみたのですが
途中から追いかける事が出来ず、正確に何をしているのかが読み取れませんでした。
試したこと
python
1import pandas as pd 2 3class MyClass : 4 user_name = None 5 age = None 6 def __str__(self) -> str: 7 return "名前:{0}、年齢:{1}".format ( self.user_name , self.age ) 8 def __eq__(self, __o: object) -> bool: 9 return self.age==__o.age 10 11user1 = MyClass() 12user1.user_name="takeda" 13user1.age=12 14 15user2 = MyClass() 16user2.user_name="takeda2" 17user2.age=13 18 19user3 = MyClass() 20user3.user_name="takeda3" 21user3.age=12 22 23a=[user1,user3,user3] 24b=[user3,user2,None] 25 26df1=pd.DataFrame({'A':a}) 27df2=pd.DataFrame({'A':b}) 28 29print(df1.compare(df2))
この結果が A self other 1 名前:takeda3、年齢:12 名前:takeda2、年齢:13 2 名前:takeda3、年齢:12 None となり、user1とuser3はuser_nameが違うにも関わらず同じと判定しており user3とNoneも違うと判定してくれています。 この事からNoneとNone以外は違うと判定して その後、==つまり__eq__で判定して__str__で内容を出力してくれるのだと感じます。
この解釈で有っているのでしょうか。
何かご存知の方よろしくお願いします。
気になった理由
二つのDataFrame間の差分を調べる事があったのですが
本当にちゃんと差分を出力してくれているのかが気になり
その為、どういう風に差分の出し方をしているのかが疑問になった次第です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/30 14:33
2021/12/30 14:40
2021/12/30 15:06
2021/12/30 15:13
2021/12/30 15:26
2021/12/30 15:33 編集
2021/12/30 15:49
2021/12/30 20:25
2021/12/31 00:55 編集
2021/12/31 07:31
2021/12/31 07:32