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

Python 从列表中存在的dataframe列中的字符串中提取前缀,python,pandas,Python,Pandas,正在寻求帮助。 我有一个pandas dataframe列,我想在单独列表中提取前缀 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-

正在寻求帮助。 我有一个pandas dataframe列,我想在单独列表中提取前缀

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中的前缀列表和零件号列,似乎没有任何异常情况

编辑2
我追踪到在pr_列表中有一个*似乎在扔它。是不是有些保留字符?有没有办法把它分解成文本呢?

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

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
您可以尝试:

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-

所有前缀都以“-”结尾吗?在本例中,您可以尝试从df[“PartNumber”]开始播放。str.split(“-”)不,不幸的是,可以是任何字符,从单个数字到特殊字符,如*SV,这就是我使用列表路径的原因您的解决方案对我提供的示例数据非常有效,但是当我将其应用于完整数据集时,我得到了一个错误:在16号位置没有要重复的内容,这与我的数据有关?嗨,安基,你的解决方案同样适用于测试数据,但我得到了错误:在16号位置没有要重复的内容,所以这一定是我的数据。如果您有任何想法,是否不确定此错误?