如何从pandas中的字符串中提取带有变量的正则表达式?

问题描述 投票:0回答:1

我有一个包含文本的数据框列,我想创建一个新列,其中包含带有名称的句子,但没有其他句子。希望最终结果如下所示:

spreadsheet printout with sentence in column A, and sentence with names in column 3

我能够从名称列表中识别包含名称的单元格,但我在提取包含名称的句子的部分遇到了困难。

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 pandas regex variables
1个回答
0
投票

如果您不专注于使用正则表达式,您可以修改此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.
© www.soinside.com 2019 - 2024. All rights reserved.