如何在Python中使用类似vlookup功能查询DataFrame中的文本数据
Python实现企业名称匹配(类VLOOKUP映射功能)
你需要实现的是基于不全企业名称,在全量数据集中检索匹配对应企业的功能,需求示例如下:
下面分两种常见匹配场景给出实现方案:
1. 精确子串匹配
适用于你手里的不全名称是对应完整企业名称的连续准确子串,没有错别字、语序错乱问题,直接用pandas即可实现:
首先安装依赖:pip install pandas openpyxl
实现代码:
import pandas as pd # 1. 读取数据:替换为你自己的文件路径和列名 df_partial = pd.read_excel("待匹配企业列表.xlsx", usecols=["不全企业名称"]) df_full = pd.read_excel("全量企业数据集.xlsx", usecols=["完整企业名称"]) # 2. 匹配判断:返回是否存在,以及所有匹配到的完整企业名称 def match_enterprise(partial_name): matches = df_full["完整企业名称"][df_full["完整企业名称"].str.contains(partial_name, na=False)] if matches.empty: return "否", "" else: return "是", "、".join(matches.tolist()) df_partial[["是否存在于数据集", "匹配到的完整名称"]] = df_partial["不全企业名称"].apply( lambda x: pd.Series(match_enterprise(x)) ) # 3. 导出结果 df_partial.to_excel("匹配结果.xlsx", index=False)
2. 模糊相似度匹配
适用于不全名称有错别字、缺字漏字、语序调整的情况,基于文本相似度算法匹配,需要安装fuzzywuzzy库:
安装依赖:pip install fuzzywuzzy python-Levenshtein pandas openpyxl
实现代码:
import pandas as pd from fuzzywuzzy import fuzz # 可自定义相似度阈值,范围0-100,分数越高匹配精度越高 SIMILARITY_THRESHOLD = 80 # 1. 读取数据 df_partial = pd.read_excel("待匹配企业列表.xlsx", usecols=["不全企业名称"]) df_full = pd.read_excel("全量企业数据集.xlsx", usecols=["完整企业名称"]) full_name_list = df_full["完整企业名称"].tolist() # 2. 模糊匹配 def fuzzy_match_enterprise(partial_name): match_res = [] for full_name in full_name_list: score = fuzz.partial_ratio(partial_name, full_name) if score >= SIMILARITY_THRESHOLD: match_res.append(f"{full_name}(相似度{score})") if not match_res: return "否", "" else: return "是", "、".join(match_res) df_partial[["是否存在于数据集", "匹配到的完整名称"]] = df_partial["不全企业名称"].apply( lambda x: pd.Series(fuzzy_match_enterprise(x)) ) # 3. 导出结果 df_partial.to_excel("模糊匹配结果.xlsx", index=False)
注意事项
- 全量数据集较大(超过10万条)时,可以先对全量企业名称做分词索引优化匹配速度
- 可根据实际匹配结果调整相似度阈值,平衡匹配准确率和召回率
内容的提问来源于stack exchange,提问作者Domec
相关产品推荐
相关产品推荐

