python 从列中提取ID数值

zmeyuzjn  于 2022-10-30  发布在  Python
关注(0)|答案(2)|浏览(217)

我有下面的数据集,我需要提取9数字ID从“注解”列。下面的一些代码我尝试了,但有时我没有得到正确的输出。有时有几个数字之间的空格,或一个符号,或有时有不是ID等的一部分数值。任何想法如何做到这一点更有效?

DF['Output'] = DF['Notes'].str.replace(' '+' '+' '+'-', '')
DF['Output'] = DF['Notes'].str.replace(' '+' '+'-', '')
DF['Output'] = DF['Notes'].str.replace(' '+'-', '')
DF['Output'] = DF['Notes'].str.replace('-', '')

DF['Output'] = DF['Notes'].str.replace('\D', ' ')

DF['Output'] = DF['Notes'].str.findall(r'(\d{9,})').apply(', '.join)

| 备注|预期输出|
| - -|- -|
| 约325% xyz|第0页|
| 九号|小行星123456789|
| 第234567 891号|二34567891|
| 英国海军标准567 891 524; 123有限公司|小行星567891524|
| 2.5%锰钾钙,含量为3234 56 78 9; TGH 1235 z型|小行星323456789|
| 故障诊断功能956 327-12 8典型|小行星956327128|
| X Y Z 1.59% 2345 567 81;一个35英寸|小行星23455678|
| VTO 126%,12345 67|第0页|
| 1234农行3456 1 2 4 91|小行星34561|

mftmpeh8

mftmpeh82#

首先使用str.replace去掉空格和破折号,然后使用str.extract查找9位数,我们可以尝试:

DF["Output"] = DF["Notes"].str.replace('[ -]+', '', regex=True)
                          .str.extract(r'(?<!\d)(\d{9})(?!\d)')

为了解释正则表达式模式,我们在\d{9}周围放置了非数字边界标记,以确保我们 * 只 * 匹配9位数字。

  • (?<!\d)确保前面的是非数字或列的开头
  • (\d{9})匹配并准确捕获9位数字
  • (?!\d)确保后面是非数字或列结尾

相关问题