Как извлечь регулярное выражение с переменной из строки в пандах?

У меня есть столбец данных, содержащий текст, и я хотел бы создать новый столбец, содержащий предложения с именами, но не содержащие других предложений. Надеюсь на конечный результат, который будет выглядеть так:

Я могу идентифицировать ячейки, содержащие имена, из списка имен, но спотыкаюсь о той части, которая извлекает предложение, содержащее имя.

import re
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'ColumnA': ['Lorum ipsum. This is approved. Lorum Ipsum.', 'Lorum Ipsum. Send the contract to May. Lorum Ipsum.', 'Junk Mail from Brian.']
})


last_names_list = ['May','Brian']

df['last_names'] = ''
for x in last_names_list:
    df['last_names'] = np.where(df['ColumnA'].str.contains(x),x,df['last_names'])

def f(x,y):
    return re.findall(fr'[^.]{x}[^.]',y)

df['col_3'] = df.apply(lambda x: f(x['last_names'],x['ColumnA']), axis=1)

print(df)

Когда я печатаю фрейм данных, каждая строка с именем в df[col_3'] создает пустой список.

Любая помощь приветствуется.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы не зациклены на использовании регулярных выражений, вы можете изменить ответ, представленный в этом посте SO, чтобы автоматически идентифицировать предложения, содержащие одно из имен, указанных в last_names_list:

last_names_list = ['May','Brian']
pattern = '|'.join(last_names_list)
df[df.ColumnA.str.contains(pattern)]

Это возвращает:

ColumnA
1   Lorum Ipsum. Send the contract to May. Lorum I...
2   Junk Mail from Brian.

Спасибо, что поделились pattern = '|'.join(last_names_list) — сегодня узнал что-то новое!

oymonk 29.07.2024 03:28
Ответ принят как подходящий

Код

pat = '|'.join(last_names_list)
df['col_3'] = df['ColumnA'].str.extract(rf'([^.]*?\b(?:{pat})\b.*?\.)')

дф:

Другие вопросы по теме