且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

列表性能中的Python模糊匹配字符串

更新时间:2022-02-12 00:03:53

通过编写矢量化操作和避免循环来显着提高速度

Major speed improvements come by writing vectorized operations and avoiding loops

导入必要的包

from fuzzywuzzy import fuzz
import pandas as pd
import numpy as np

从第一个列表创建数据框

dataframecolumn = pd.DataFrame(["apple","tb"])
dataframecolumn.columns = ['Match']

从第二个列表创建数据框

compare = pd.DataFrame(["adfad","apple","asple","tab"])
compare.columns = ['compare']

Merge - 通过引入键(自连接)的笛卡尔积

dataframecolumn['Key'] = 1
compare['Key'] = 1
combined_dataframe = dataframecolumn.merge(compare,on="Key",how="left")
combined_dataframe = combined_dataframe[~(combined_dataframe.Match==combined_dataframe.compare)]

矢量化

def partial_match(x,y):
    return(fuzz.ratio(x,y))
partial_match_vector = np.vectorize(partial_match)

使用矢量化并通过设置阈值来获得所需的结果

combined_dataframe['score']=partial_match_vector(combined_dataframe['Match'],combined_dataframe['compare'])
combined_dataframe = combined_dataframe[combined_dataframe.score>=80]

结果

+--------+-----+--------+------+
| Match  | Key | compare | score
+--------+-----+--------+------+
| apple  | 1   |   asple |    80
|  tb    | 1   |   tab   |    80
+--------+-----+--------+------+