【发布时间】:2016-09-30 11:01:25
【问题描述】:
这是我第一次尝试 pandas,所以我想知道问题出在哪里。我正在尝试比较两个大约 30.000 行的数据框。我的第一个直觉引导我迭代两个数据帧,因此对于 df1 中的每个条目,我们迭代 df2 中的所有行以查看它是否存在。
也许根本没有必要,还有更简单的选择。这就是我所做的。问题是,它只是挂起而没有输出任何错误消息,但我无法确定是什么导致它挂起......
import pandas as pd
dfOld = pd.read_excel("oldfile.xlsx", header=0)
dfNew = pd.read_excel("newfile.xlsx", header=0)
columns = ["NAME","ADDRESS","STATUS","DATE"]
result = pd.DataFrame(columns=columns)
for index, rowOld in dfOld.iterrows():
for index, rowNew in dfNew.iterrows():
if rowOld.all() != rowNew.all():
result.loc[len(result)] = rowOld.all()
writer = pd.ExcelWriter('Deletions.xlsx', engine='xlsxwriter')
result.to_excel(writer, sheet_name='Deleted')
writer.save()
每个数据帧的样本数据:
$1 & UP STORE CORP.142A | N FRANKLIN ST | 409 408 | 31/07/2014
$1 store | 110 n martin ave | 408 | 07/01/2015
0713, LLC | 1412 N. County Road West | 405 408 413 | 16/07/2015
1 2 3 MONEY EXCHANGE LLC | 588 N MAIN ST | 405 409 408 | 22/05/2015
$1 store premium | 110 n martin ave | 408 | 07/01/2015
0713, LLC | 1412 N. County Road West | 405 408 413 | 16/07/2015
1 2 3 MONEY EXCHANGE LLC | 588 N MAIN ST | 405 409 408 | 22/05/2015
1145 Parsons Inc | 1145 Parsons Ave | 405 408 | 19/11/2013
所需的输出是数据框results 填充了dfOld 中不存在于dfNew 中的行。因此,新的 results 数据框将包括:
$1 & UP STORE CORP.142A | N FRANKLIN ST | 409 408 | 31/07/2014
$1 store | 110 n martin ave | 408 | 07/01/2015
问题在于它不适用于大量(每个数据帧 30.000 个条目),所以即使它可以处理较小的样本,我想知道这是否是处理这么多条目的方法。
【问题讨论】:
-
您可以添加数据样本(每个 df 5,6 行)和所需的输出吗?
-
谢谢你,如果你得到想要的输出,它可以很容易验证。
-
我也尝试了您的解决方案,并通过示例可以正常工作(我不确定是对是错)