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

如何在Pandas中提取ANN/ANC/ANE后的内容生成ID列?

从Pandas字符串列中提取指定ID值

原始数据

import pandas as pd

data = {'desc': ['ADRIAN PETER - ANN 80020355787C - 11 Baillon Pass.pdf', 
                 'AILEEN MARCUS - ANC 800E15432922 - 5 Mandarin Way.pdf',
                 'AJITH SINGH - ANN 80020837750 - 11 Berkeley Loop.pdf', 
                 'ALEX MARTIN-CURTIS - ANC 80021710355 - 26 Dovedale St.pdf',
                 'Alice.Smith\Jodee - Karen - ANE 80020428377 - 58 Harrisdale Dr.pdf']}
df = pd.DataFrame(data, columns = ['desc'])

问题说明

需要新增ID列,提取desc中ANN、ANC或ANE后面的对应ID值,原代码df['id'] = df['desc'].str.extract(r'\-([^|]+)\-')未得到预期结果。

原代码问题

原正则表达式逻辑错误:

  • \-([^|]+)\-匹配两个横杠之间的内容,但部分字符串包含多个横杠(如最后一条数据),会提取到错误片段
  • 未限定匹配ANN/ANC/ANE后的内容,无法精准定位目标ID

解决方案

使用正向预查精准匹配目标ID:

df['ID'] = df['desc'].str.extract(r'(?<=ANN|ANC|ANE)\s+(\w+)')

或者另一种等价写法:

df['ID'] = df['desc'].str.extract(r'(ANN|ANC|ANE)\s+(\w+)', expand=False)[1]

正则说明

  • (?<=ANN|ANC|ANE):正向预查,确保匹配内容的前导是ANN、ANC或ANE
  • \s+:匹配ID前的一个或多个空格
  • (\w+):匹配由字母、数字组成的ID内容

运行结果

ID
0  80020355787C
1  800E15432922
2   80020837750
3   80021710355
4   80020428377

内容的提问来源于stack exchange,提问作者CK-P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:45:30