如何删除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
相关产品推荐
相关产品推荐

