我有两个具有相同列数的数据帧,d1和d2。
注意:d1和d2可能有不同的行数。 注意:d1和d2可能不会被索引到每个数据帧中的同一行。
检查两个数据帧是否具有相同数据的最佳方法是什么?
我目前的解决方案包括将两个数据帧附加在一起并删除任何匹配的行。
d_combined = d1.append(d2)
d_discrepancy = d_combined.drop_duplicates(keep=False)
print(d_discrepancy)
我是python和pandas库的新手。因为我将使用具有数百万行和8-10列的数据帧,是否有更快速,更有效的方法来检查差异?是否还可以显示产生的差异行来自哪个初始数据帧?
答案 0 :(得分:3)
设置
d1 = pd.DataFrame(dict(A=[1, 2, 3, 4]))
d2 = pd.DataFrame(dict(A=[2, 3, 4, 5]))
选项1
使用pd.merge
。我将包含参数indicator=True
以显示数据的来源。
d1.merge(d2, how='outer', indicator=True)
A _merge
0 1 left_only
1 2 both
2 3 both
3 4 both
4 5 right_only
如果他们拥有相同的数据,我希望_merge
列的所有内容都为both
。所以我们可以查看
d1.merge(d2, how='outer', indicator=True)._merge.eq('both').all()
False
在这种情况下,它返回False
因此不是相同的数据。
选项2
使用drop_duplicates
您需要确保首先从初始数据帧中删除重复项。
d1.drop_duplicates().append(d2.drop_duplicates()) \
.drop_duplicates(keep=False).empty