Извлечь первое слово после метода split() в столбце pandas

#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) находится в предложении, то я хотел бы извлечь слово непосредственно после.