gpt4 book ai didi

python - Pandas 数据框比较挂起,没有错误消息

转载 作者:太空宇宙 更新时间:2023-11-04 03:04:54 25 4
gpt4 key购买 nike

这是我第一次尝试 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 个条目),所以即使它可以处理较小的样本,我想知道这是否是处理那么多条目的方法。

最佳答案

您可以使用 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

关于python - Pandas 数据框比较挂起,没有错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39789990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com