从列表中存在的dataframe列中的字符串中提取前缀

时间:2019-03-14 04:41:40

标签: python pandas

寻求帮助。 我有一个pandas数据框列,我想提取前缀(如果该前缀存在于单独的列表中)。

pr_list = ['1 FO-','2 IA-']

df中的列就像

PartNumber     
ABC
DEF
1 FO-BLABLA
2 IA-EXAMPLE

我要寻找的是提取存在的前缀,放入新列中,并将其余字符串保留在原始列中。

PartNumber   Prefix
ABC          
DEF
BLABLA       1 FO-
EXAMPLE      2 IA-

尝试过诸如str.startswith之类的操作,但是对Python的新手却有些了解,并且无法使其正常工作。

非常感谢

编辑 以下两种解决方案都可以处理测试数据,但是出现错误
错误:位置16上没有重复的内容
这表明我的数据集中有些歪斜。不确定位置16指的是什么,但同时查看位置16的前缀列表和PartNumber列,似乎没有什么异常之处?

编辑2 我追踪到它在pr_list中有一个*似乎正在抛出它。是*保留字符吗?有没有办法将其分解为文本?

2 个答案:

答案 0 :(得分:1)

您可以尝试:

df['Prefix']=df.PartNumber.str.extract(r'({})'.format('|'.join(pr_list))).fillna('')
df.PartNumber=df.PartNumber.str.replace('|'.join(pr_list),'')
print(df)

  PartNumber Prefix
0        ABC       
1        DEF       
2     BLABLA  1 FO-
3    EXAMPLE  2 IA-

答案 1 :(得分:0)

也许这不是您想要的,但可能会有所帮助。

import pandas as pd

pr_list = ['1 FO-','2 IA-']
df = pd.DataFrame({'PartNumber':['ABC','DEF','1 FO-BLABLA','2 IA-EXAMPLE']})

extr = '|'.join(x for x in pr_list)
df['Prefix'] = df['PartNumber'].str.extract('('+ extr + ')', expand=False).fillna('')
df['PartNumber'] = df['PartNumber'].str.replace('|'.join(pr_list),'')
df