我有一个20万行的数据集,有两列:1-唯一的客户id和地址组合,2-收入。该表按收入进行排序,目标是通过对第1列进行模糊匹配来清理第1列,以检查是否存在任何收入较高的客户地址组合,这些组合可用于替换收入较低的组合,而这些组合很可能是由于拼写差异造成的。在
示例:
第一行的第三个值和第一行很相似。在
我有一个工作的python代码,但它太慢了:import pandas as pd
import datetime
import time
import numpy as np
from pyxdameraulevenshtein import normalized_damerau_levenshtein_distance, normalized_damerau_levenshtein_distance_ndarray
data = pd.read_csv("CustomerMaster.csv", encoding="ISO-8859-1")
# Create lookup column from the dataframe itself:
lookup_data=data['UNIQUE_ID']
lookup_data=pd.Series.to_frame(lookup_data)
# Start iterating on row by row on lookup data to find the first closest fuzzy match and write that back into dataframe:
start = time.time()
for index,row in data.iterrows():
if index%5000==0:print(index, time.time()-start)
for index2, row2 in lookup_data.iterrows():
ratio_val=normalized_damerau_levenshtein_distance(row['UNIQUE_ID'],row2['UNIQUE_ID'])
if ratio_val<0.15:
data.set_value(index,'UPDATED_ID',row2['UNIQUE_ID'])
data.set_value(index,'Ratio_Val',ratio_val)
break
目前,这段模糊匹配的代码块运行时间太长了——前15k行大约需要8个小时,时间成倍增长,正如人们所预期的那样。关于如何更有效地编写这段代码有什么建议吗?在