通过在字符串列中查找精确单词(未组合)来过滤DataFrame

Sat*_*tya 2 python regex string dataframe pandas

我的DataFrame有两列:

Name  Status
 a    I am Good
 b    Goodness!!!
 c    Good is what i feel
 d    Not Good-at-all
Run Code Online (Sandbox Code Playgroud)

我想过滤其中Status有一个字符串'Good'作为其确切单词的行,而不是与任何其他单词或字符组合.

所以输出将是:

Name  Status
a    i am Good
c    Good is what i feel
Run Code Online (Sandbox Code Playgroud)

另外两行中有一个'Good'字符串,但与其他字符混合在一起,因此不应该被拾取.

我试过做:

d = df[df['Status'].str.contains('Good')]  # But all rows come up
Run Code Online (Sandbox Code Playgroud)

我相信一些正则表达式(r'\bGood\b', Status)会这样做,但这不能一起总结.在DataFrame过滤条件中我如何/在何处完全符合正则表达式来实现这一目标?如何实现startswithendswith'好'(精确的单词搜索)?

Ale*_*ley 6

如果您将"exact"定义为没有其他字符(包括定义单词边界的标点符号\b),则可以检查前导和尾随空格和/或开始/结束锚点:

>>> df[df['Status'].str.contains(r'(?:\s|^)Good(?:\s|$)')]
  Name               Status
0    a            I am Good
2    c  Good is what i feel
Run Code Online (Sandbox Code Playgroud)

说明:

  • (?:\s|^)是一个非捕获组,用于查找空格字符(\s)或字符串(^)的开头.

  • Good 是你要找的词.

  • (?:\s|$)是一个非捕获组,用于查找空格字符(\s)或字符串结尾($).