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

如何用正则表达式替换DataFrame中指定列的部分字符串?

问题:替换Pandas DataFrame中tag列|前的内容

原始DataFrame

fict={'well':['10B23','10B23','10B23','10B23','10B23','10B23'],
      'tag':['15B22|TestSep_OutletFlow','15B22|TestSep_GasOutletFlow','15B22|TestSep_WellNum','15B22|TestSep_GasPresValve','15B22|TestSep_Temp','WHT']}
df=pd.DataFrame(fict)

输出:

well    tag
0   10B23   15B22|TestSep_OutletFlow
1   10B23   15B22|TestSep_GasOutletFlow
2   10B23   15B22|TestSep_WellNum
3   10B23   15B22|TestSep_GasPresValve
4   10B23   15B22|TestSep_Temp
5   10B23   WHT

需求

将tag列中|符号之前的所有内容替换为字符串11A22,无|的行保持原样,目标输出如下:

well    tag
0   10B23   11A22|TestSep_OutletFlow
1   10B23   11A22|TestSep_GasOutletFlow
2   10B23   11A22|TestSep_WellNum
3   10B23   11A22|TestSep_GasPresValve
4   10B23   11A22|TestSep_Temp
5   10B23   WHT

错误尝试及结果

尝试的正则替换代码:

df['tag2']=df['tag'].str.replace(r'([a-z0-9]*)|TestSep_[a-z0-9]*','11A22',regex=True)

错误结果:

well    tag tag2
0   10B23   15B22|TestSep_OutletFlow    11A2211A22B11A2211A22|11A2211A2211A22O11A2211A...
1   10B23   15B22|TestSep_GasOutletFlow 11A2211A22B11A2211A22|11A2211A2211A22G11A2211A...
2   10B23   15B22|TestSep_WellNum   11A2211A22B11A2211A22|11A2211A2211A22W11A2211A...
3   10B23   15B22|TestSep_GasPresValve  11A2211A22B11A2211A22|11A2211A2211A22G11A2211A...
4   10B23   15B22|TestSep_Temp  11A2211A22B11A2211A22|11A2211A2211A22T11A2211A22
5   10B23   WHT 11A22W11A22H11A22T11A22

错误原因

  1. 正则中的|是逻辑或运算符,不是字面量竖线,未转义导致匹配逻辑混乱
  2. 匹配规则错误,没有精准定位|之前的内容,而是拆分匹配零散字符,导致多次替换

正确解决方案

方法一:精准正则替换

df['tag'] = df['tag'].str.replace(r'^[^|]+', '11A22', regex=True)
  • 正则解释:^[^|]+匹配字符串开头到第一个|之间的所有非|字符,仅替换该部分,无|的行不受影响

方法二:字符串拆分拼接(更直观)

df['tag'] = df['tag'].apply(lambda x: '11A22|' + x.split('|')[1] if '|' in x else x)
  • 逻辑:对每个tag值判断是否包含|,是则拆分后保留后半部分并拼接前缀,否则返回原内容

验证结果

执行任意一种方法后,输出符合需求的DataFrame:

well    tag
0   10B23   11A22|TestSep_OutletFlow
1   10B23   11A22|TestSep_GasOutletFlow
2   10B23   11A22|TestSep_WellNum
3   10B23   11A22|TestSep_GasPresValve
4   10B23   11A22|TestSep_Temp
5   10B23   WHT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:55:23