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

Pandas str.contains匹配开头子串失效问题求助

解决str.contains匹配不到开头子串的问题

嘿,我碰到过类似的坑!你说的这个情况大概率是字符串里藏了看不见的“小尾巴”——比如前导空格、全角空格或者换行符之类的,导致str.contains明明看起来应该匹配,却返回了False。咱们一步步来解决:

  • 第一步:排查字符串的真实内容
    先确认你的Course_ID列里的字符串是不是真的以"AAS 102"开头,有时候眼睛看到的和实际存储的不一样。用这段代码查看每个字符串的原始表示:

    # 输出每个Course_ID的原始格式,方便找隐藏字符
    df['Course_ID'].apply(repr).head()
    

    如果输出里看到类似' AAS 102 (...)'(前面多了空格)或者'\nAAS 102 (...)'(前面有换行),那就是隐藏字符在搞鬼。

  • 第二步:清理数据并匹配
    如果发现了隐藏空白,先把字符串前后的空白清理掉:

    # 去除字符串前后的所有空白(包括空格、换行、制表符)
    df['Course_ID'] = df['Course_ID'].str.strip()
    

    现在再用你原来的查询代码,应该就能匹配到目标行了:

    filtered_rows = df[df['Course_ID'].str.contains('AAS 102')]
    
  • 备选方案:直接用正则兼容空白
    如果你不想修改原始数据,也可以用正则表达式直接匹配允许前后有空白的情况:

    # 匹配任意位置的"AAS 102",允许前面有任意空白字符
    filtered_rows = df[df['Course_ID'].str.contains(r'\s*AAS 102', regex=True)]
    

    或者关闭正则匹配,直接做字面匹配(避免正则的潜在干扰):

    # 关闭正则,按普通字符串字面匹配
    filtered_rows = df[df['Course_ID'].str.contains('AAS 102', regex=False)]
    
  • 完成你的需求:更新Eqvnt_id列
    搞定匹配后,直接用loc来批量更新目标行的Eqvnt_id:

    # 先清理数据(如果需要)
    df['Course_ID'] = df['Course_ID'].str.strip()
    
    # 给所有匹配到的行设置同一个Eqvnt_id值
    df.loc[df['Course_ID'].str.contains('AAS 102'), 'Eqvnt_id'] = 'AAS_102_UNIFIED'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:22:48