如何逐行比较两个数据框?

Posted

技术标签:

【中文标题】如何逐行比较两个数据框?【英文标题】:How to compare Two dataframes row by row? 【发布时间】:2020-06-05 17:59:31 【问题描述】:

我有 152431 X 15 形状的数据框,我想要两帧的差异


# df1:
Date       Fruit  Num  Color 
2013-11-24 Banana 22.1 Yellow
2013-11-24 Orange  8.6 Orange
2013-11-24 Apple   7.6 Green
2013-11-24 Celery 10.2 Green

# df2:
Date       Fruit  Num  Color 
2013-11-24 Banana 22.1 Yellow
2013-11-24 Orange  8.6 Orange
2013-11-24 Apple   7.6 Green
2013-11-24 Celery 10.2 Green
2013-11-25 Apple  22.1 Red
2013-11-25 Orange  8.6 Orange

【问题讨论】:

基于所有 4 列的差异? 这是你想要的吗***.com/questions/17095101/… pd.concat([df1, df2]).drop_duplicates(keep=False) ? 能否为 DF 提供预期的输出? 【参考方案1】:

如果您的数据帧存储在两个文件中,我会在循环中读取每个文件的每一行并创建一个包含差异的列表:

old_file_path = 'INSERT_FILE_PATH_OF_FILE_A'
new_file_path = 'INSER_FILE_PATH_OF_FILE_B'

with open(old_file_path, 'r', encoding='utf-8') as old ,open(new_file_path, 'r', encoding='utf-8') as new:
    fileone = old.readlines()
    filetwo = new.readlines()

total_of_changes=[]
for line in filetwo:
    if line not in fileone:
        total_of_changes.append(line)

【讨论】:

不,请不要那样做!尤其是在使用 pandas 时,有 比读取和比较每个文件 逐行 更好的选择。对于 152k 行,这绝对是低效的,而且不符合 Python 和笨拙。 很公平,更 Python 的方法也会对我有所帮助。你有没有想到一个特定的功能? :) 是的,Chris A 在他的评论中发布了一个不错的解决方案:pd.concat([df1, df2]).drop_duplicates(keep=False)

以上是关于如何逐行比较两个数据框?的主要内容,如果未能解决你的问题,请参考以下文章

如何比较两个忽略列名的数据框?

如何比较 SQL 语句中两个数据框的架构?

如何比较两个熊猫数据框并返回将它们相互映射的索引?

如何获取和比较pyspark中两个数据框中相似列的所有值的数据类型

如何基于相同的 ID 比较两个不同数据框中的日期列

比较两个熊猫数据框的差异