如何在Pandas DataFrame的details列替换指定正则匹配内容
解决DataFrame特定格式字符串替换问题
问题描述
现有如下DataFrame:
import pandas as pd df = pd.DataFrame( columns=['deal','details'], data=[ ['deal1', 'MH92h'], ['deal2', 'L97h'], ['deal3', '97.538'], ['deal4', 'MH98h'], ['deal5', 'TRD (97.612 cvr)'], ] )
需求:将details列中匹配MH[0-9]+h格式的行替换为[对应数字].75,其余行保留原内容。
尝试的错误代码:
df = df.assign(test_col=df.details.str.replace("\d+",r'\d+'+'75'), regex=True)
正确实现方法
你的代码问题在于正则匹配范围过宽和反向引用使用错误,以下是修正后的代码:
# 添加新列并完成替换 df['test_col'] = df['details'].str.replace(r'MH(\d+)h', r'\1.75', regex=True)
代码说明
- 正则表达式精准匹配:
MH(\d+)h专门匹配以MH开头、h结尾,中间为连续数字的字符串,其中(\d+)是捕获组,用于提取中间的数字部分。 - 正确使用反向引用:替换字符串中的
\1代表第一个捕获组捕获到的数字,拼接.75后就得到目标格式。 - 自动保留原内容:对于不匹配该正则的行,
str.replace会直接保留原内容,无需额外判断。
运行结果
处理后的DataFrame如下:
| deal | details | test_col |
|---|---|---|
| deal1 | MH92h | 92.75 |
| deal2 | L97h | L97h |
| deal3 | 97.538 | 97.538 |
| deal4 | MH98h | 98.75 |
| deal5 | TRD (97.612 cvr) | TRD (97.612 cvr) |
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

