熊猫数据框比较挂起而没有错误消息

电传电话

这是我第一次尝试熊猫,所以我想知道是什么问题。我正在尝试比较每个大约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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章