使用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()
运行后你会得到:
| col | extracted |
|---|---|
| 1.23% Test1 Test2 Test3 XYZ Oct 2018 | Test1 Test2 Test3 |
| 4.56% Hello World ZYX Nov 2020 | Hello World |
| 7.89% A B C XYZ Dec 2019 | A B C |
进阶:如果要把Test1/Test2/Test3拆分成单独列
如果需要把提取到的多个子串拆成独立列,直接用str.split就行:
df[['part1', 'part2', 'part3']] = df['extracted'].str.split(expand=True)
这样就能得到拆分后的多列数据啦!
内容的提问来源于stack exchange,提问作者rubs90
相关产品推荐
相关产品推荐

