Pandas DataFrame 如何使用正则提取Purchase Id及对应数字
基于pandas提取文本列中固定格式Purchase Id的实现方案
核心正则逻辑
要匹配目标片段,正则需要覆盖三个要素:
- 固定起始匹配锚点:从字面量
Purchase Id:开始匹配,避免匹配到文本中其他包含该关键词的无关片段 - 中间分隔符匹配:用
\s*兼容冒号后可能出现的任意数量空白(空格、制表符等),适配格式不统一的文本场景 - 数字段匹配:用
\d+匹配后续所有连续数字,遇到非数字字符(如示例中数字后接空格、Charge Id的位置)自动停止匹配,刚好截取到数字结束的位置,完全不会把后续的Charge Id内容混入提取结果
最终适配需求的基础正则为:r'(Purchase Id:\s*\d+)',外层括号为正则捕获组,是pandas文本提取方法正常返回内容的必要配置。
代码实现步骤
1. 加载并准备示例数据
构造与你提供的场景完全一致的测试DataFrame,便于验证效果:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ "Description": [ "Online order Purchase Id: 14527903 Charge Id: 11111111", "Online order Purchase Id: 90762134 Charge Id: 33345872" ] })
2. 执行文本提取
调用pandas内置的str.extract方法,逐行匹配目标片段:
df["Extracted_Content"] = df["Description"].str.extract(r'(Purchase Id:\s*\d+)', expand=False)
运行后得到的Extracted_Content列内容与期望的提取结果完全一致:
- 第一行返回
Purchase Id: 14527903 - 第二行返回
Purchase Id: 90762134
常见场景适配调整
- 若遇到大小写不统一的文本(如小写
purchase id写法),可导入re模块后在提取时增加忽略大小写参数:df["Description"].str.extract(r'(Purchase Id:\s*\d+)', expand=False, flags=re.IGNORECASE) - 若需要单独提取数字部分(不保留
Purchase Id:前缀),可将捕获组位置调整到数字段:正则改为r'Purchase Id:\s*(\d+)',提取结果就会只返回纯数字字符串 - 若匹配失败(对应行没有符合格式的内容),方法会自动返回NaN,可直接用于后续异常数据筛选
内容的提问来源于stack exchange,提问作者greycat90
相关产品推荐
相关产品推荐

