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

Pandas的str.contains()无论regex参数如何都返回错误结果如何解决

问题原因分析

  • 第一次全返回True:str.contains默认开启正则匹配,$是正则里的行尾锚定符,匹配任何字符串的末尾,因此所有非空条目都会返回True。
  • 第二次设置regex=False后全返回False,核心原因是待搜索的$符号和你传入的搜索字符不匹配,常见场景包括:
    • 字符串中存储的是全角美元符号$(Unicode编码\uff04),你传入搜索的是半角$(ASCII编码\x24)
    • 字符串中$前后存在零宽空格、非打印字符,或者你本地输入搜索字符串时误带了不可见字符
    • 部分条目为NaN空值,str.contains默认对空值返回NaN而非布尔值,干扰筛选判断

解决方案

第一步:先确认字符编码

取你确认包含$的条目,打印原始编码确认$的类型:

# 取第一个元素打印编码,替换索引为你确定含$的行号即可
print(valid_usa_gross.iloc[0].encode('unicode_escape'))

如果输出中对应$的部分是\\uff04,说明是全角符号,搜索时要对应传入全角$;如果是\\x24就是正常半角$。

第二步:使用正确的匹配写法

如果是半角$,优先用正则转义写法匹配,同时设置空值默认返回False:

valid_usa_gross_USD = valid_usa_gross.str.contains(r'\$', na=False)

如果是全角$,修改匹配字符串即可:

valid_usa_gross_USD = valid_usa_gross.str.contains(r'$', na=False)

第三步:(可选)先清洗字符串再匹配

如果存在多余空白、不可见字符干扰,先做清洗再匹配:

# 先去除首尾空白、再匹配
valid_usa_gross_USD = valid_usa_gross.str.strip().str.contains(r'\$', na=False)

筛选符合条件的条目直接用布尔索引即可:

only_usd = valid_usa_gross[valid_usa_gross_USD]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:36:03