【发布时间】:2021-10-11 17:20:02
【问题描述】:
我正在尝试使用编写函数的fuzzywuzzy包使用模糊匹配加入几个数据集:
is it possible to do fuzzy match merge with python pandas?
这是我的代码:
import pandas as pd
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
blanks = pd.read_csv("names_blank_type.csv")
mapping = pd.read_csv("TYPE-MAP.csv")
blanks = pd.DataFrame(blanks)
blanks = blanks.drop(blanks.columns[[0,1]], axis=1)
mapping = pd.DataFrame(mapping)
mapping = mapping.drop(mapping.columns[[2]], axis=1)
blanks_smaller = blanks.head(100)
mapping_smaller = mapping.head(100)
def fuzzy_merge(df_1, df_2, key1, key2, threshold=90, limit=2):
s = df_2[key2].tolist()
m = df_1[key1].apply(lambda x: process.extract(x, s, limit=limit))
df_1['matches'] = m
m2 = df_1['matches'].apply(lambda x: ', '.join([i[0] for i in x if i[1] >= threshold]))
df_1['matches'] = m2
return df_1
fuzzy_merge(mapping_smaller, blanks_smaller, str('company_name'), str('company_name'), threshold=80)
如果我只使用 mapping_smaller 和 blanks_smaller,fuzzy_merge 函数实际上可以工作,但如果我尝试使用完整数据集,则会收到以下错误:
完整的空白数据集有不到 350,000 行,而完整的映射集有不到 100,000 行。关于为什么它适用于小集合而不是产生上述错误的较大集合的任何想法?
谢谢!!
【问题讨论】:
标签: python pandas fuzzywuzzy