gpt4 book ai didi

python - Pandas 将列内容与关键字匹配(带空格和括号)

转载 作者:太空宇宙 更新时间:2023-11-04 09:24:53 24 4
gpt4 key购买 nike

数据框中的一列包含我要匹配的关键字。

我想检查每列是否包含任何关键字。如果是,打印出来。

尝试如下:

import pandas as pd
import re

Keywords = [

"Caden(S, A)",
"Caden(a",
"Caden(.A))",
"Caden.Q",
"Caden.K",
"Caden"
]

data = {'People' : ["Caden(S, A) Charlotte.A, Caden.K;", "Emily.P Ethan.B; Caden(a", "Grayson.Q, Lily; Caden(.A))", "Mason, Emily.Q Noah.B; Caden.Q - Riley.P"]}

df = pd.DataFrame(data)

pat = '|'.join(r"\b{}\b".format(x) for x in Keywords)

df["found"] = df['People'].str.findall(pat).str.join('; ')

print df["found"]

它返回 Nan。我想挑战在于关键字中的空格和括号。

获得理想输出的正确方法是什么?谢谢。

Caden(S, A); Caden.K
Caden(a
Caden(.A))
Caden.Q

最佳答案

由于您不需要查找每个 关键字,但如果它们重叠则需要查找最长的关键字,您可以使用带findall 的正则表达式方法。

这里的重点是,你需要先将关键字按长度降序排列(因为其中有空格),然后你需要对这些值进行转义,因为它们包含特殊字符,然后你必须修改单词边界使用明确的字边界,(?<!\w)(?!\w) (请注意 \b 取决于上下文)。

使用

pat = r'(?<!\w)(?:{})(?!\w)'.format('|'.join(map(re.escape, sorted(Keywords,key=len,reverse=True))))

查看 online Python test :

import re
Keywords = ["Caden(S, A)", "Caden(a","Caden(.A))", "Caden.Q", "Caden.K", "Caden"]
rx = r'(?<!\w)(?:{})(?!\w)'.format('|'.join(map(re.escape, sorted(Keywords,key=len,reverse=True))))
# => (?<!\w)(?:Caden\(S,\ A\)|Caden\(\.A\)\)|Caden\(a|Caden\.Q|Caden\.K|Caden)(?!\w)
strs = ["Caden(S, A) Charlotte.A, Caden.K;", "Emily.P Ethan.B; Caden(a", "Grayson.Q, Lily; Caden(.A))", "Mason, Emily.Q Noah.B; Caden.Q - Riley.P"]
for s in strs:
print(re.findall(rx, s))

输出

['Caden(S, A)', 'Caden.K']
['Caden(a']
['Caden(.A))']
['Caden.Q']

关于python - Pandas 将列内容与关键字匹配(带空格和括号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58215111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com