Python 通过在字符串列中查找精确的字(未组合)来过滤数据帧
My DataFrame有两列:Python 通过在字符串列中查找精确的字(未组合)来过滤数据帧,python,regex,string,pandas,dataframe,Python,Regex,String,Pandas,Dataframe,My DataFrame有两列: Name Status a I am Good b Goodness!!! c Good is what i feel d Not Good-at-all 我想筛选状态中以字符串“Good”作为确切单词的行,而不是与任何其他单词或字符组合的行 因此,输出将是: Name Status a i am Good c Good is what i feel 另外两行中有一个“Good”字符串,但与其他字符混合在一起,
Name Status
a I am Good
b Goodness!!!
c Good is what i feel
d Not Good-at-all
我想筛选状态中以字符串“Good”作为确切单词的行,而不是与任何其他单词或字符组合的行
因此,输出将是:
Name Status
a i am Good
c Good is what i feel
另外两行中有一个“Good”字符串,但与其他字符混合在一起,因此不应拾取
我试着做:
d = df[df['Status'].str.contains('Good')] # But all rows come up
我相信像(r'\bGood\b',Status)
这样的正则表达式可以做到这一点,但这并不能把它总结起来。在数据帧过滤条件下,我如何/在何处准确地将正则表达式放入其中以实现这一点?以及如何使用或结束“Good”(精确单词搜索)?如果您将“精确”定义为不表示其他字符(包括定义单词边界的标点符号\b
),则可以改为检查前导和尾随空格和/或起始/结束锚定:
>>> df[df['Status'].str.contains(r'(?:\s|^)Good(?:\s|$)')]
Name Status
0 a I am Good
2 c Good is what i feel
说明:
是查找空格字符((?:\s | ^)
)或字符串开头(\s
)的非捕获组^
就是你要找的词Good
是一个非捕获组,用于查找空格字符((?:\s |$)
)或字符串结尾(\s
)$
df[df['Status'].str.contains(r'(?:\s|^)Good(?:,\s|$)')]
基于类似的方法,您还可以动态构建查询,如下所示:
base = r'^{}'
expr = '(?:\s|^){}(?:,\s|$)'
string='Good'
df[df['Status'].str.contains(base.format(''.join(expr.format(string))))]
这在过滤数据帧时确实帮助了我。@ajcr谢谢,我接受你的回答,但正如你确切提到的,我可以包含一些特殊字符,如?。。。因此,我很好奇如何允许一些/少数字符与“Good”组合,如“Good`s”或“Good!”。你能帮个忙吗?你可以创建一个字符类,其中的字符可以跟在“good”后面,例如
!?”代码>。第二个字符类将是“(?:[\s!?']|$)”
@AlexRiley您能帮我吗。我只想匹配行中的特定字符串。我有一个带字符串的列,我只想用正则表达式来计算这个精确的字符串?从上面的答案中,如果发现良好,它将跳过。