pandas.Series.str.contains和 和有pandas.Series.str.match什么区别?为什么是下面这种情况?
s1 = pd.Series(['house and parrot'])
s1.str.contains(r"\bparrot\b", case=False)
Run Code Online (Sandbox Code Playgroud)
我明白了True,但是当我这样做的时候
s1.str.match(r"\bparrot\b", case=False)
Run Code Online (Sandbox Code Playgroud)
我得到了False。为什么会这样?
str.contains()的文档指出:
测试模式或正则表达式是否包含在系列或索引的字符串中。
str.match()的文档指出:
确定每个字符串是否与正则表达式匹配。
这两种方法的区别在于str.contains()使用:re.search,而str.match()使用re.match。
根据re.match() 的文档
如果 string 开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回 None;请注意,这与零长度匹配不同。
因此 parrot 与字符串的第一个字符不匹配,因此您的表达式返回 False。House 确实匹配第一个字符,因此它找到 house 并返回 true。