我正在创建一个脚本,该脚本遍历Pandas数据库中的电子邮件列表,并将结果写入新的数据框。现在的问题是,脚本运行太慢。我知道模糊匹配自然会有些慢,但是我也认为,如果我可以消除这里的一些循环,可以通过一次写入所有新数据来加快速度,而不是一次通过一行时间。
我尝试弄乱append函数,以便使其立即编写所有内容,而不是逐行慢慢进行。我认为lambda函数在这里可能会有所帮助,但我不确定。
#edit rows here
rows = 1000
#edit rows here
sampleDonors = donors.sample(n=rows)
matches = pd.DataFrame()
for email in sampleDonors['PersonEmail']:
if email not in ['NONE', 'NA', 'N/A']:
letter = sampleDonors.loc[sampleDonors['PersonEmail'] == email, 'LastName'][:1].str.get(0)
constituentIDA = sampleDonors.loc[sampleDonors['PersonEmail'] == email, 'PersonID'][:1]
letter = letter.tolist()[0]
if letter.isalpha() == True:
donorStr = locals()['Donors{}'.format(letter)]
someAddress = (donorStr['PersonEmail'])
yo = process.extract(email, someAddress, scorer=fuzz.ratio, limit = 10)
yo = [list(elem) for elem in yo]
for i in yo:
constituentIDB = donorStr.loc[donorStr['PersonEmail'] == i[0], 'PersonID'][:1]
add = [email, constituentIDA.item(), constituentIDB.item()]
i.extend(add)
matches = matches.append(yo, ignore_index= True)
我得到了想要的最终结果,但是要花一些时间才能达到目标。 10000行大约需要5个小时。