这是我第一次尝试熊猫,所以我想知道是什么问题。我正在尝试比较每个大约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个条目),因此即使它可以使用较小的样本,我也不知道这是否是处理大量条目的方法。
您可以merge
与参数一起使用,indicator=True
然后按boolean indexing
以下条件过滤:
df = pd.merge(dfOld, dfNew, how='outer', indicator=True)
print (df)
NAME ADDRESS STATUS \
0 $1 & UP STORE CORP.142A N FRANKLIN ST 409 408
1 $1 store 110 n martin ave 408
2 0713, LLC 1412 N. County Road West 405 408 413
3 1 2 3 MONEY EXCHANGE LLC 588 N MAIN ST 405 409 408
4 $1 store premium 110 n martin ave 408
5 1145 Parsons Inc 1145 Parsons Ave 405 408
DATE _merge
0 31/07/2014 left_only
1 07/01/2015 left_only
2 16/07/2015 both
3 22/05/2015 both
4 07/01/2015 right_only
5 19/11/2013 right_only
print (df[df._merge == 'left_only'])
NAME ADDRESS STATUS DATE _merge
0 $1 & UP STORE CORP.142A N FRANKLIN ST 409 408 31/07/2014 left_only
1 $1 store 110 n martin ave 408 07/01/2015 left_only
最后删除助手列_merge
:
print (df[df._merge == 'left_only'].drop('_merge', axis=1))
NAME ADDRESS STATUS DATE
0 $1 & UP STORE CORP.142A N FRANKLIN ST 409 408 31/07/2014
1 $1 store 110 n martin ave 408 07/01/2015
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句