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

如何删除Pandas列中特定子串ESP后的所有下划线

解决Pandas中删除"ESP"后所有下划线的问题

针对你遇到的需求,这里提供两种可靠的解决方案:

方法1:字符串分割拼接法

这种方法逻辑直观,兼容性强,不需要依赖正则的版本限制:

import pandas as pd

# 构造示例数据
data = {
    'col': [
        'AProj_AB_ESP20211124125639',
        'AProj_AB_ESP_20231017_205105',
        'AProj_AB_ESP2021__1117132530',
        'AProj_AB_ESP_20211123215423'
    ]
}
df = pd.DataFrame(data)

# 处理逻辑:拆分字符串后清除"ESP"后的所有下划线
df['col'] = df['col'].apply(lambda x: x.split('ESP')[0] + 'ESP' + x.split('ESP')[1].replace('_', ''))

# 输出结果
print(df['col'])

执行后得到目标输出:

0    AProj_AB_ESP20211124125639
1    AProj_AB_ESP20231017205105
2    AProj_AB_ESP20211117132530
3    AProj_AB_ESP20211123215423
Name: col, dtype: object

核心逻辑:用split('ESP')将字符串拆分为"ESP"前后两部分,对后半部分执行全局下划线清除,再重新拼接成完整字符串。

方法2:正则表达式替换法(Python 3.7+)

如果你使用Python 3.7及以上版本,可以利用支持可变长度回溯断言的正则,一步完成替换:

df['col'] = df['col'].str.replace(r'_(?<=ESP.*)', '', regex=True)

正则说明

  • _(?<=ESP.*):匹配所有满足「前面存在"ESP"及后续任意内容」的下划线
  • 不同于你之前尝试的(?<=ESP)_(仅匹配紧跟"ESP"的单个下划线),这个正则会覆盖"ESP"之后所有位置的下划线,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:27:32