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