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
相关产品推荐
相关产品推荐

