当有前导空格时,为啥 Pandas series.str.contains 方法无法检测到匹配?
Posted
技术标签:
【中文标题】当有前导空格时,为啥 Pandas series.str.contains 方法无法检测到匹配?【英文标题】:Why does Pandas series.str.contains method not detect match when there is a leading space?当有前导空格时,为什么 Pandas series.str.contains 方法无法检测到匹配? 【发布时间】:2020-11-22 11:02:00 【问题描述】:我想查找包含字符串' (target)'
的所有索引值。
例子:
index = pd.Index(['TIC7201-PV (target)', 'TIC7202-PV', 'TIC7203-PV'])
print(index.str.contains(' (target)'))
我得到了什么:
[False False False]
我的预期:
[ True False False]
比较:
print(index.str.contains('(target)'))
print(index.str.endswith(' (target)'))
产生:
[ True False False]
[ True False False]
【问题讨论】:
【参考方案1】:原来,regex
参数的默认设置是 True
。
(...)
表示捕获内部的所有内容,因此它试图找到' target'
而不是' (target)'
解决问题的选项有:
设置regex=False
用\(...\)
转义括号
因此,要获得所需的行为,有两种选择:
# 1
index.str.contains(' (target)',regex=False)
# 2
index.str.contains(r' \(target\)')
【讨论】:
【参考方案2】:通过 regex
False ,()
这里是正则表达式样式
index.str.contains(' (target)',regex=False)
Out[103]: array([ True, False, False])
【讨论】:
以上是关于当有前导空格时,为啥 Pandas series.str.contains 方法无法检测到匹配?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 pandas.Series.std() 与 numpy.std() 不同?