寻求帮助。 我有一个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中有一个*似乎正在抛出它。是*保留字符吗?有没有办法将其分解为文本?
答案 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