首页 > 解决方案 > 如何使用Python在数据框中查找特定单词后跟数字

问题描述

我有一个包含一系列模式的数据框。

示例数据框:

mydata: 
[ 'Ticket number INS 00909',
'Ticket number INS00909',
'Ticket number REQ 8776',
'Ticket number REQ#8777',
'Ticket number REQ #8778',
'Ticket number REQ8778',
'Number is CR 0098445554',
'No INS number',
'No REQUEST',
'DESCRIBED']

Search_Values = ['INS', 'REQ', 'CR' ]
pattern = '|'.join(Search_Values)
df['check'] = df['mydata'].str.contains(pattern)

基本上,我只想查找和提取票号。应该应用什么逻辑来拉取 CR、REQ、INS 后跟数字?有时字符串会在 Req 和 number 之间包含特殊字符,如 #、-、:、*、空格(\s)。有人可以帮忙吗?

标签: pythonregexpandas

解决方案


这将为您提供一个新的 df 列。mydata 字符串的索引用于仅包含您想要的信息的切片。最后一个 if/else 块检查字符串中是否有数字以避免附加误报匹配。

order_list = []

for idx, row in df.iterrows():

    if 'INS' in row['mydata']:
        index = row['mydata'].index('INS')
    elif  'REQ' in row['mydata']:
        index = row['mydata'].index('REQ')
    elif  'CR' in row['mydata']:
        index = row['mydata'].index('CR')


    if any(map(str.isdigit, row['mydata'])):
        order_list.append(row['mydata'][index:])
    else:
        order_list.append('')

df['order'] = order_list

print(df)

    mydata                  order
0   Ticket number INS 00909 INS 00909
1   Ticket number INS00909  INS00909
2   Ticket number REQ 8776  REQ 8776
3   Ticket number REQ#8777  REQ#8777
4   Ticket number REQ #8778 REQ #8778
5   Ticket number REQ8778   REQ8778
6   Number is CR 0098445554 CR 0098445554
7   No INS number   
8   No REQUEST  
9   DESCRIBED   

推荐阅读