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

DataFrame列含特殊字符文件名的子字符串匹配失败求助

问题分析与解决方案

问题根源

你遇到的匹配失败和警告,核心原因是pandas.Series.str.contains()的默认行为:它会把传入的字符串当作正则表达式解析。

  • 对于birads - 2 (11).bmp,其中的(11)是正则的分组语法,.是匹配任意字符的通配符,这些特殊字符导致实际匹配逻辑偏离了你想要的"字面字符串包含",所以找不到对应行,同时触发正则分组的警告。
  • 而case001.png里没有正则特殊字符,所以能正常匹配。

解决方案

方案1:直接使用字面量匹配(推荐)

给str.contains()添加regex=False参数,强制按字面内容检查子串匹配,完全规避正则解析的问题:

actual = df.loc[df['Image_filename'].str.contains(str1, regex=False), 'BIRADS'].values[0]

方案2:转义正则特殊字符(不推荐,冗余)

如果一定要保留正则模式,可以先用re.escape()转义所有特殊字符:

import re
escaped_str = re.escape(str1)
actual = df.loc[df['Image_filename'].str.contains(escaped_str), 'BIRADS'].values[0]

额外优化:避免索引错误

如果存在找不到匹配行的情况,values[0]会抛出IndexError,可以增加空值判断:

match_rows = df[df['Image_filename'].str.contains(str1, regex=False)]
if not match_rows.empty:
    actual = match_rows['BIRADS'].iloc[0]
else:
    actual = None  # 或根据需求处理无匹配的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:22:20