gpt4 book ai didi

python - 使用其他 pandas 列来指示 Series.contains 中的正则表达式

转载 作者:行者123 更新时间:2023-12-01 19:37:45 27 4
gpt4 key购买 nike

我有一个带有长文本字段和本质上是一个类别的短字符串的数据框。我的目标是利用正则表达式在数据框中创建一个新列,以对应是否存在匹配项。正则表达式以类别为条件。这是一个例子:

a = ['the dog is mad and sad 50', 'the cat is happy']
b = ['dog', 'cat']
regex = ['[0-9]{2}', '[0-9]{3}']

ab = pd.DataFrame(zip(a,b,regex), columns = ['text', 'category', 'pattern'])

在上面的示例中,为了避免使用 for 循环遍历每个类别,我将模式设为数据框中的字符串列,并希望将模式列用作正则表达式。

但是当我运行以下命令时出现错误

ab['match'] = np.where(ab[ab['text'].str.contains(ab['pattern'], regex = True)], 1, 0)

TypeError: 'Series' objects are mutable, thus they cannot be hashed

数据框非常大并且可能有很多类别,因此首选像上面这样的矢量化解决方案。

最佳答案

如果要将特定的正则表达式应用于特定的行,则不能使用 vectorized approach .您必须使用逐行应用:

import re

ab['match'] = ab.apply(lambda row: bool(re.search(row['pattern'], row['text'])), axis=1)

text category pattern match
0 the dog is mad and sad 50 dog [0-9]{2} True
1 the cat is happy cat [0-9]{3} False

关于python - 使用其他 pandas 列来指示 Series.contains 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60154913/

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