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

