【问题标题】:Filtering keywords/sentences in a dataframe pandas过滤数据框熊猫中的关键字/句子
【发布时间】:2021-01-17 09:17:53
【问题描述】:

目前我有一个数据框。这是我的数据框的示例:

我还有一个关键字/句子列表。我想将它与“内容”列匹配,看看是否有任何关键字或句子匹配。

这是我所做的

# instructions_list is just the list of keywords and key sentences 
instructions_list = instructions['Key words & sentence search'].tolist()
pattern = '|'.join(instructions_list)


bureau_de_sante[bureau_de_sante['Content'].str.contains(pattern, regex = True)]

虽然它给了我结果,但它也给了我这个 UserWarning : UserWarning: This pattern has match groups。要实际获取组,请使用 str.extract。 返回 func(self, *args, **kwargs)。

问题:

  1. 如何防止显示用户警告?
  2. 找到并查看列中是否存在匹配项后,如何在新列中打印特定匹配项?

【问题讨论】:

  • 可以分享一下 1)pandas的版本;和 2) 指令列表?如果您的说明中有括号,则说明“匹配组”
  • @qmeeus 我已经更新了

标签: python pandas matching


【解决方案1】:

您提供regex 来搜索数据框。如果您的指令列表中有括号(就像您的示例中的情况一样),那么这构成了一个匹配组。为了避免这种情况,您必须将它们转义(即:在它们前面添加\,以便(Critical risk) 变为\(Critical risk\))。您可能还想转义所有特殊字符,例如 \ . " ' 等。

现在,您可以使用这些组从数据中提取匹配项。这是一个例子:

df = pd.DataFrame(["Hello World", "Foo Bar Baz", "Goodbye"], columns=["text"])
pattern = "(World|Bar)"
print(df.str.extract(pattern))
#        0
# 0  World
# 1    Bar
# 2    NaN

您可以通过简单的分配将这一列添加到您的数据框中(例如df["result"] = df.str.extract(pattern)

【讨论】:

  • 是否有一些允许转义所有特殊字符的内置函数?
  • 当我尝试使用你在我正在处理的数据中提到的 .str.extract(pattern) 时。我只得到NaN。您知道导致显示而不是匹配的问题吗?
  • 是的,这意味着没有匹配项。很可能您的正则表达式有点到处都是,因为您将完整的句子连接在一起。考虑到您的用例,有什么方法可以简化它吗?如果没有,最好在指令列表上使用 for 循环
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 2019-04-13
  • 2015-05-28
  • 2018-02-06
相关资源
最近更新 更多