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

Pandas DataFrame替换括号内文本为指定格式的代码问题求助

修复方案:匹配括号内年份并替换文本

你的代码失效核心原因是原正则仅能匹配括号内仅含4位年份的场景,但实际数据里括号内是带描述的长文本(比如(discontinued in March 2021)),年份只是其中一部分,原正则r'\((\d{4})\)'根本匹配不到目标内容。

修正后的代码

调整正则表达式,匹配整个括号内容并捕获其中的年份,一次性完成替换:

import re
import pandas as pd

data = {'Product': ['Product A', 'Product B', 'Product C (discontinued in March 2021)', 'Product D', 'Product E (discontinued on 30 April 2004)']}
df = pd.DataFrame(data)

def amend_vals(value):
    # 匹配括号内任意内容,同时捕获其中的4位年份
    pattern = r'\(.*?(\d{4}).*?\)'
    # 用分组引用捕获的年份,直接替换整个括号部分
    return re.sub(pattern, r'(discont. \1)', value)

df['Product'] = df['Product'].apply(amend_vals)

代码说明

  • 正则\(.*?(\d{4}).*?\):
    • \(和\):精准匹配括号的左右边界
    • .*?:非贪婪模式匹配任意字符(避免误匹配多个括号的情况),直到找到4位年份
    • (\d{4}):将括号内的4位年份捕获为分组1
  • 替换字符串r'(discont. \1)':用\1引用捕获的年份,生成目标格式的括号内容

最终处理结果

执行后df['Product']的内容为:

0                  Product A
1                  Product B
2    Product C (discont. 2021)
3                  Product D
4    Product E (discont. 2004)

内容的提问来源于stack exchange,提问作者A.N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:51:00