#string #pandas
#строка #pandas
Вопрос:
У меня есть столбец df предложений (df.sentence), как показано ниже:
sentence
His name is Paul. He's in jail.
Her name is Allison. She's a doctor.
He is named Steve. He's an engineer.
и т.д.
В настоящее время у меня есть цикл, настроенный следующим образом, для извлечения имен:
for i in range(len(df.sentence):
if 'name is' in df['sentence'][i]:
name = re.findall(r'(?<=name iss)[a-z] ',str(df['sentence'][i]),re.I)
Однако это не работает. Или мне просто может понадобиться помощь в правильной настройке регулярного выражения.
ОБНОВЛЕНО (выводится некорректно):
for i in range(len(df)):
if '[name is|named]' in df['sentence'][i]:
name = df.sentence.i.str.extract('[name is|named]s(.*?)(?=.|s)')
else:
pass
Комментарии:
1. Вы хотите извлечь имена? Вам понадобится некоторое базовое представление о шаблоне, например, это только одно слово после
[HisHer] name is
или все до точки?2. @ALollz, тот же шаблон. Слово непосредственно после строки ‘name является’
Ответ №1:
Используйте утверждение lookbehind:
df.str.extract(r'(?<= name is |is named )(w )')
Вывод:
0
0 Paul
1 Allison
2 Steve
Комментарии:
1. Не понадобилось ‘?<=’, но это именно то, что я искал. Спасибо
2. @user10939484 Это все равно будет работать, но тогда у вас будет два столбца (если вас это не устраивает)
Ответ №2:
Если все строки в этом столбце имеют одинаковый формат (как четвертое слово, представляющее интерес), тогда извлеките индекс 4 напрямую.
Комментарии:
1. К сожалению, это не тот случай. ЕСЛИ строка (name is или named) находится в предложении, то я хотел бы извлечь слово непосредственно после.