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

Pandas中如何同时使用字典与正则表达式实现字符串替换

解决方案

可以直接使用pandas.Series.str.replace的回调函数参数实现需求,匹配到符合规则的内容后直接查询替换字典返回对应值即可,完整实现代码如下:

import pandas as pd

# 示例数据
column = pd.Series(['01-01', '01-01 qwerasdf 0101-0101', '01-02 test', 'a01-02b', '101-02'])

# 批量替换字典
replace_dict = {'01-01': '0101', '01-02': '0102'}

# 执行替换
column = column.str.replace(
    pat=r'(?<!\d)(\d{2}\-\d{2})(?!\d)',
    repl=lambda match: replace_dict.get(match.group(1), match.group(1)),
    regex=True
)

代码说明

  • pat参数沿用你原来的正则规则,仅匹配前后无数字的xx-xx格式内容
  • repl参数传入匿名回调函数,每次匹配到内容时会将匹配对象传入函数:
    • 用match.group(1)取出匹配到的xx-xx内容
    • 调用replace_dict.get查询替换值,如果匹配到的内容不在字典中,就返回原内容避免报错
  • 执行完成后输出结果如下,符合需求:
    0                  0101
    1    0101 qwerasdf 0101-0101
    2                0102 test
    3                  a0102b
    4                 101-02
    dtype: object
    

替代方案(适配旧版本pandas)

如果你的pandas版本低于1.2,不支持repl传入回调函数,可先导入re模块,构造带正则锚点的替换字典再调用replace方法:

import re
# 构造带前后校验的正则替换字典
regex_replace_dict = {
    rf'(?<!\d){re.escape(k)}(?!\d)': v 
    for k, v in replace_dict.items()
}
# 执行替换
column = column.replace(regex_replace_dict, regex=True)

内容的提问来源于stack exchange,提问作者k07224115

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:09:04