python - 为什么比较两个数据帧时会得到不同的结果?

标签 python pandas dataframe comparison

我正在比较两个 df,当使用 .equals() 时,它会给出 False,但是如果我将两个 df 附加在一起并使用 drop_duplicate() 它没有给我任何东西。有人能解释一下吗?

最佳答案

TL;DR

这些是完全不同的操作,我从未期望它们会产生相同的结果。

pandas.DataFrame.equals

将返回一个 bool 值,具体取决于 Pandas 是否确定正在比较的数据帧“相同”。这意味着一个的索引与另一个的索引“相同”,一个的列与另一个的列“相同”,一个的数据与另一个的数据“相同”另一个。

参见docs

pandas.DataFrame.eq相同,它将返回 bool 值的数据帧。

设置

考虑这三个数据框

df0 = pd.DataFrame([[0, 1], [2, 3]], [0, 1], ['A', 'B'])
df1 = pd.DataFrame([[1, 0], [3, 2]], [0, 1], ['B', 'A'])
df2 = pd.DataFrame([[0, 1], [2, 3]], ['foo', 'bar'], ['A', 'B'])

df0              df1              df2      

   A  B             B  A               A  B
0  0  1          0  1  0          foo  0  1
1  2  3          1  3  2          bar  2  3

如果我们检查df1是否等于df0,我们得到

df0.equals(df1)

False

即使所有元素都是相同的

df0.eq(df1).all().all()

True

这是因为列没有对齐。如果我对列进行排序...

df0.equals(df1.sort_index(axis=1))

True

pandas.DataFrame.drop_duplicates

比较行中的值,不关心索引。

因此,这两者都会产生相同的结果

df0.append(df2).drop_duplicates()

df0.append(df1, sort=True).drop_duplicates()

   A  B
0  0  1
1  2  3

当我append(或pandas.concat)时,Pandas 将对齐列并将附加的数据帧添加为新行。然后 drop_duplicates 就完成了它的事情。但正是列的固有对齐实现了我上面使用 sort_indexaxis=1 所做的事情。

关于python - 为什么比较两个数据帧时会得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58508089/

相关文章:

检索 R 中特定单元格的行名和列名

python - 将张量向量附加到张量矩阵

python - 根据大小分割文件的有效方法

python - 如何预填充 Django 更新表单并将其写回数据库

python - 迭代字典以创建一个 DataFrame,其中列名作为字典键

python - 如何一步重置所有组的DataFrame索引?

python - 在 pandas 数据框中使用 .count 计算日期时间

python - Pandas :如何根据其他列值的条件对列求和?

python - Pandas Dataframe 如何在不四舍五入的情况下切断 float ?

python - pandas 通过排除日期范围对 DatetimeIndex 进行过滤