0
我有一个包含两列200k行的数据集:1 - 唯一的客户ID和地址组合,以及2 - 收入。该表按收入排序,目标是通过与自身进行模糊匹配来清理第1列,以检查是否有足够接近的客户地址组合以及更高的收入,这些组合可以用于替换收入较低的组合来自拼写差异。使用python模糊匹配排序列与自己
实施例:
在上述例子中的第三行是非常类似于第一行,所以我希望它采取的第一行的值。
我有一个工作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小时的时间成倍增加为人们会期待。任何有关如何更有效地编写此代码的建议?