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.
相关产品推荐
相关产品推荐

