使用PolyFuzz做模糊匹配报Series真值歧义ValueError如何修复?
问题描述
使用PolyFuzz库执行模糊字符串匹配任务时,运行以下代码:
fasttext_embeddings = WordEmbeddings('en-crawl') fasttext = Embeddings(fasttext_embeddings, min_similarity=0, model_id="FastText") tfidf = TFIDF(min_similarity=0, model_id="TF-IDF") rapidfuzz = RapidFuzz(n_jobs=-1, score_cutoff=0, model_id="RapidFuzz") matchers = [tfidf, fasttext, rapidfuzz] model = PolyFuzz(matchers) model.match(Netflix['title'], IMBD['Title'])
执行过程中触发如下报错:ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
报错截图:
报错原因
PolyFuzz的match方法要求传入的待匹配字符串、匹配库字符串必须是Python原生字符串列表格式。代码中直接传入了pandas的Series对象(Netflix['title']、IMBD['Title']均为pandas Series结构),PolyFuzz内部逻辑对该结构做布尔判断时,触发了pandas不允许直接对Series做整体真值判断的保护机制,最终抛出该错误。
修复方案
将传入match方法的两个pandas Series对象通过.tolist()方法转换为Python原生列表即可。如果数据中存在空值(NaN),需要先做缺失值处理,避免混入非字符串类型数据导致后续匹配异常。
修改后的可运行代码如下:
fasttext_embeddings = WordEmbeddings('en-crawl') fasttext = Embeddings(fasttext_embeddings, min_similarity=0, model_id="FastText") tfidf = TFIDF(min_similarity=0, model_id="TF-IDF") rapidfuzz = RapidFuzz(n_jobs=-1, score_cutoff=0, model_id="RapidFuzz") matchers = [tfidf, fasttext, rapidfuzz] model = PolyFuzz(matchers) # 先处理缺失值,再转为原生列表传入 netflix_titles = Netflix['title'].fillna("").tolist() imdb_titles = IMBD['Title'].fillna("").tolist() model.match(netflix_titles, imdb_titles)
内容的提问来源于stack exchange,提问作者wenqi lin
相关产品推荐
相关产品推荐

