作为单元测试的一部分,我需要测试两个 DataFrame 是否相等。 DataFrames 中列的顺序对我来说并不重要。然而,这对 Pandas 来说似乎很重要:
import pandas
df1 = pandas.DataFrame(index = [1,2,3,4])
df2 = pandas.DataFrame(index = [1,2,3,4])
df1['A'] = [1,2,3,4]
df1['B'] = [2,3,4,5]
df2['B'] = [2,3,4,5]
df2['A'] = [1,2,3,4]
df1 == df2
结果是:
Exception: Can only compare identically-labeled DataFrame objects
我相信表达式 df1 == df2
应该评估为包含所有 True
值的 DataFrame。显然,在这种情况下, ==
的正确功能应该是什么值得商榷。我的问题是:是否有一种 Pandas 方法可以满足我的需求?也就是说,有没有一种方法可以进行忽略列顺序的相等比较?
原文由 jcrudy 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用
sort_index
对列进行排序:这将评估所有
True
值的数据框。正如@osa 评论的那样,这对于 NaN 是失败的并且也不是特别健壮,在实践中可能建议使用类似于@quant 的答案的东西(注意:如果有问题,我们想要一个 bool 而不是 raise ):