You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:54:03