当有前导空格时,为啥 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() 不同?

为啥运行 pandas_udf 时 Pyspark 失败?

为啥我的 pandas DataFrame 列也是 Dataframes,而不是 Series?

为啥 "%-d" 或 "%-e" 删除前导空格或零?

为啥 "%-d" 或 "%-e" 删除前导空格或零?

为啥前导/尾随空间显示为 -16?