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

使用pandas/.str.extract与正则表达式提取子字符串

用Pandas提取特定格式字符串中的目标子串

嗨,我来帮你搞定这个提取需求!你的字符串结构很清晰:开头是浮点百分比,接着是可变长度的目标文本(比如Test1 Test2 Test3),最后是XYZ/ZYX标识加日期。咱们用str.extract配合正则表达式就能精准提取中间的内容。

步骤1:先构造一个示例DataFrame方便测试

import pandas as pd

data = {'col': ['1.23% Test1 Test2 Test3 XYZ Oct 2018', 
                '4.56% Hello World ZYX Nov 2020',
                '7.89% A B C XYZ Dec 2019']}
df = pd.DataFrame(data)

步骤2:编写正则表达式提取目标内容

核心思路是锁定目标文本的前后边界:

  • 前边界:开头的百分比格式(比如x.xx%),用正则^\d+\.\d+%匹配
  • 后边界:XYZ或ZYX三位标识,用(XYZ|ZYX)匹配
  • 中间的目标文本:用非贪婪匹配.*?抓出两个边界之间的内容(非贪婪是为了避免把后面的日期也误抓进来)

具体代码如下:

# 提取百分比和XYZ/ZYX之间的所有内容
df['extracted'] = df['col'].str.extract(r'^\d+\.\d+%\s+(.*?)\s+(XYZ|ZYX)', expand=False)[0]
# 去除首尾多余空格(可选,根据你的需求调整)
df['extracted'] = df['extracted'].str.strip()

运行后你会得到:

colextracted
1.23% Test1 Test2 Test3 XYZ Oct 2018Test1 Test2 Test3
4.56% Hello World ZYX Nov 2020Hello World
7.89% A B C XYZ Dec 2019A B C

进阶:如果要把Test1/Test2/Test3拆分成单独列

如果需要把提取到的多个子串拆成独立列,直接用str.split就行:

df[['part1', 'part2', 'part3']] = df['extracted'].str.split(expand=True)

这样就能得到拆分后的多列数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:15:59