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

Pandas正则替换失效:无法为Gas列无PASON的行添加该字符串

问题分析与解决

原代码无效的原因

你的正则表达式完全偏离了目标需求:

  • 原正则r'(\d+/\d+)(\t)(\d+)'是匹配「数字/数字+制表符+数字」的格式,但你的目标数据中,需要修改的是19/14、56/26这类不含PASON的纯分数字符串,既没有制表符,也没有后续数字,所以这个正则根本匹配不到任何需要修改的内容,自然不会生效。
  • 同时,你的替换逻辑也错误,需求是给目标内容添加后缀 PASON,而非替换中间的制表符部分。

正确实现方法

以下是几种简洁有效的实现方式:

方法1:用str.endswith筛选后拼接(最直观)

import pandas as pd

df = pd.DataFrame({'Depth':['7500', '7800', '8300', '8500'],
                'Gas':['25-13 PASON', '9/8 PASON', '19/14', '56/26'],
                'ID':[1, 2, 3, 4]})

# 筛选出不以PASON结尾的行,添加后缀
mask = ~df['Gas'].str.endswith('PASON')
df.loc[mask, 'Gas'] += ' PASON'

方法2:用正则替换(匹配所有不含PASON结尾的内容)

# 负向预查匹配所有不以PASON结尾的字符串,添加后缀
df['Gas'] = df['Gas'].replace(r'^(?!.*PASON$).+$', r'\g<0> PASON', regex=True)

正则说明:^(?!.*PASON$).+$表示“整个字符串结尾不是PASON的内容”,\g<0>指代匹配到的完整字符串。

方法3:用str.contains筛选

mask = ~df['Gas'].str.contains('PASON', case=False)
df.loc[mask, 'Gas'] = df.loc[mask, 'Gas'] + ' PASON'

此方法会匹配所有不含PASON的内容(无论位置),如果需要严格匹配结尾,优先用方法1或2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:03:39