如何识别列中目标单词变体并为对应行填充指定列值?
识别地名拼写变体并批量填充对应值
需求说明
需要识别DataFrame中place列里PHILADELPHIA、ILLINOIS的各类拼写变体(包括拼写错误、缩写、大小写差异等),并在value列对应行填充指定值:匹配到PHILADELPHIA变体填P,匹配到ILLINOIS变体填I。
示例输入数据结构:
| place | value |
|---|---|
| PHIADELPHIA | |
| PHIALDELPHIA | |
| PHIDELPHIA | |
| illinois | |
| ... |
解决方案
我们可以用模糊匹配(Fuzzy Matching)结合Levenshtein距离计算字符串相似度,判断是否属于目标单词的变体。这里使用fuzzywuzzy库,它封装了Levenshtein距离的计算逻辑,支持全匹配、部分匹配等模式,能高效处理拼写错误、缩写类变体。
实现步骤
安装依赖库
先安装fuzzywuzzy和优化计算速度的python-Levenshtein:pip install fuzzywuzzy python-Levenshtein编写匹配逻辑
定义函数统一处理大小写,通过计算字符串相似度匹配目标单词,设定阈值判断归属。批量填充值
将函数应用到place列,完成value列的批量填充。
完整代码示例
import pandas as pd import numpy as np from fuzzywuzzy import fuzz # 生成示例数据 place = ['PHIADELPHIA','PHIALDELPHIA','PHIDELPHIA','illinois','PHIELADELPHIA','PHIILADELPHIA','illinoi','PHILA','PHILA.','PHILAD','PHILADALPHIA','PHILADELPHIA','PHILADELAPHIA','PHILADELHIA','PHILADELHPIA','PHILADELLPHIA','PHILADELPHIA','PHILADELPH','PHILADELPHA','PHILADELPHAI','PHILADELPHI','PHILADELPHIA'] value=[np.nan]*len(place) df = pd.DataFrame(zip(place,value), columns=["place", "value"]) # 定义匹配函数 def match_place(place_str): # 统一转为大写,消除大小写差异影响 place_upper = place_str.upper() # 目标单词与对应填充值映射 targets = { "PHILADELPHIA": "P", "ILLINOIS": "I" } # 遍历目标,计算部分匹配相似度(适配缩写类变体) for target, fill_val in targets.items(): # partial_ratio适合处理字符串部分匹配(如PHILA是PHILADELPHIA的缩写) similarity = fuzz.partial_ratio(place_upper, target) # 设定相似度阈值,可根据需求调整 if similarity >= 80: return fill_val # 未匹配到返回原空值 return np.nan # 应用函数填充value列 df['value'] = df['place'].apply(match_place) # 查看结果 print(df)
代码说明
- 大小写统一:将输入字符串转为大写,避免大小写差异导致的匹配失败;
- partial_ratio:使用部分匹配相似度,能有效识别缩写、前缀类变体;
- 阈值调整:若需更严格匹配可提高阈值(如90),兼容更多拼写错误则降低阈值;
- 扩展性:新增目标单词时,直接在
targets字典中添加键值对即可。
输出示例
运行代码后,value列会被正确填充:
| place | value |
|---|---|
| PHIADELPHIA | P |
| PHIALDELPHIA | P |
| PHIDELPHIA | P |
| illinois | I |
| illinoi | I |
| PHILA | P |
| ... | ... |
内容的提问来源于stack exchange,提问作者fast_crawler
相关产品推荐
相关产品推荐

