#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 Это как-то связано с моими данными?