【发布时间】:2013-01-08 21:16:05
【问题描述】:
作为单元测试的一部分,我需要测试两个 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 方法可以满足我的要求?也就是说,有没有办法进行忽略列顺序的相等比较?
【问题讨论】:
-
您可以使用以下命令强制列相同:
df1 == df2.reindex(columns=df1.columns) -
@Zelazny7 实际上并不总是这样做,例如如果 df2 对 df1 有额外的列。