【问题标题】:Use str.contains only with WHOLE WORDS using Pandas使用 Pandas 仅将 str.contains 与整个单词一起使用
【发布时间】:2021-09-23 16:01:08
【问题描述】:

考虑:

array = ['... ,  '...'  , '.... ' ,....]
results = df[df['Message'].str.contains('|'.join(array)).fillna(False)]

我们如何强制str.contains 只使用数组中的整个单词?

【问题讨论】:

  • @AnuragDabas:是的,试过这个pattern = '\b' + '|'.join(array) + '\b' results = df[df['Message'].str.contains(pattern).fillna(False)],但不起作用。
  • 尝试转义 \b 并用 () 包装字符串,如下所示:pattern = '\\b(' + '|'.join(arr) + ')\\b'matchcontains 效果更好,因为现在它会产生警告。
  • 太棒了!谢谢!
  • @Emma:把它作为答案,我会选择它!

标签: python python-3.x pandas string dataframe


【解决方案1】:

您需要包装所有单词 (w1|w2|w3) 以匹配数组中的任何单词。然后在两边添加一个单词边界\b,并带有转义符。

pattern = '\\b(' + '|'.join(arr) + ')\\b'
df[df['Message'].str.contains(pattern).fillna(False)]

现在由于我添加了提取组(),包含将产生警告。

UserWarning: This pattern has match groups. To actually get the groups, use str.extract.

要处理此警告,请将contains 更改为match

df[df['Message'].str.match(pattern).fillna(False)]

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 2018-08-03
    • 2013-07-11
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    相关资源
    最近更新 更多