如何在pandas中基于自定义映射表替换Series中的匹配字符串
单位别名批量替换实现方案
实现逻辑
- 先把原映射表转换为「别名→目标单位」的一对一映射,方便匹配时快速查询
- 用正则匹配所有独立出现的单位别名,避免误替换单词内部的对应字符
- 匹配成功后直接返回对应的标准单位即可
完整代码
import pandas as pd import re # 原映射表 MAPPER = { 'g': ['gm', 'gram', 'grams', 'gms'], 'ml': ['mls', 'milli-litre', 'mili-litre', 'milli litre', 'mili litre'], 'kg': ['kilo', 'kilo-gram', 'kilo gram', 'kilo grams'] } # 构造别名到标准单位的反向映射 unit_map = {alias: target for target, aliases in MAPPER.items() for alias in aliases} # 构造正则匹配规则,\b保证只匹配独立的单位别名 pattern = '|'.join(rf'\b{re.escape(alias)}\b' for alias in unit_map.keys()) # 替换回调函数 def replace_match(match): return unit_map[match.group(0)] # 示例Series,替换为你自己的Series即可 s = pd.Series([ 'Salt 500 gm', 'Sugar Powder 500 gm', 'Sugar 500 gm', 'Flour 500 gm', 'Repellent 10 mls' ]) # 执行替换 s = s.str.replace(pattern, replace_match, regex=True) # 输出结果验证 print(s)
运行后输出的结果和你预期完全一致:
0 Salt 500 g 1 Sugar Powder 500 g 2 Sugar 500 g 3 Flour 500 g 4 Repellent 10 ml dtype: object
注意事项
如果你的单位别名可能出现大小写混用的情况,可以在str.replace方法中加case=False参数,实现忽略大小写匹配。
内容的提问来源于stack exchange,提问作者Sashaank
相关产品推荐
相关产品推荐

