You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas str.contains()时出现不符合预期的结果

Pandas str.contains()匹配含加号字符串失败的原因及解决方法

问题场景

我有一个包含字符串列的Pandas DataFrame,想要筛选出包含HELLO + WORLD的所有行,但调用str.contains()方法时,大部分行返回False;而匹配HELLO / WORLD时前3行能正常返回True。

示例代码

import pandas as pd

df = pd.DataFrame({
    'AREA': ["HELLO / WORLD"] * 3 + ["HELLO + WORLD"] * 200
})

print(df['AREA'].str.contains("HELLO + WORLD"))
print(df['AREA'].str.contains("HELLO / WORLD"))

实际输出

0      False
1      False
2      False
3      False
4      False
       ...  
198    False
199    False
200    False
201    False
202    False
Name: AREA, Length: 203, dtype: bool

0       True
1       True
2       True
3      False
4      False
       ...  
198    False
199    False
200    False
201    False
202    False
Name: AREA, Length: 203, dtype: bool

原因

str.contains()默认采用正则表达式匹配模式,而+是正则中的特殊元字符,代表前面的字符(这里是空格)出现1次或多次,不是字面意义上的加号。所以你的匹配串"HELLO + WORLD"被解析为找HELLO后接1个以上空格再跟WORLD的字符串,自然匹配不到带+的目标行。

而/不属于正则特殊字符,所以"HELLO / WORLD"能正常匹配对应行。

解决方法

方法1:关闭正则匹配

给str.contains()传入regex=False参数,强制方法按字面字符串匹配,不解析正则元字符:

# 正确匹配含HELLO + WORLD的行
df['AREA'].str.contains("HELLO + WORLD", regex=False)

方法2:转义正则特殊字符

如果需要保留正则匹配功能(比如后续要用到复杂正则),可以手动转义+,或者用re.escape()自动转义所有正则特殊字符:

# 手动转义+
df['AREA'].str.contains("HELLO \\+ WORLD")

# 用re.escape自动转义所有特殊字符
import re
df['AREA'].str.contains(re.escape("HELLO + WORLD"))

验证结果

用方法1修改代码后,输出会显示前3行(HELLO / WORLD)为False,后面200行(HELLO + WORLD)为True,符合预期。


内容的提问来源于stack exchange,提问作者mentejoao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:22:18