Извлечь префикс из строки в столбце фрейма данных, который существует в списке

#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-
  

Пробовал некоторые вещи, такие как str.startswith, но немного новичок в python и не смог заставить его работать.

высоко ценится

РЕДАКТИРОВАТЬ Оба приведенных ниже решения работают с тестовыми данными, однако я получаю сообщение об ошибке
ошибка: нечего повторять в позиции 16
Что наводит на мысль о чем-то неправильном в моем наборе данных. Не уверен, к чему относится позиция 16, но при просмотре списка префиксов и столбца PartNumber в позиции 16 ничего не кажется необычным?

РЕДАКТИРОВАТЬ 2 Я проследил, чтобы в pr_list был *, который, похоже, выдает его. является ли * каким-то зарезервированным символом? есть ли способ разбить его, чтобы он считывался как текст?

Комментарии:

1. Все ли префиксы заканчиваются на ‘-‘? В этом случае вы могли бы попробовать воспроизвести из df[«PartNumber»].str.split(«-«)

2. К сожалению, это может быть что угодно, от одной цифры до специальных символов, таких как * SV, поэтому я выбрал маршрут списка

Ответ №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. Привет, Anky, снова ваше решение работает с тестовыми данными, но я получаю ошибку: ничего не повторяется в позиции 16 проблема, поэтому это должны быть мои данные. Не уверены в этой ошибке, если у вас есть какие-либо идеи?

Ответ №2:

Возможно, это не то, что вы ищете, но может это помочь.

 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
  

Комментарии:

1. Ваше решение отлично работает с образцами данных, которые я предоставил, однако, когда я применяю его к полному набору данных, я получаю сообщение об ошибке ошибка: нечего повторять в позиции 16 Это как-то связано с моими данными?