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

Pandas如何匹配DataFrame列中独立目标字符串并提取对应行

实现方案

你需要的匹配边界是|分隔符、字符串首尾,而非正则默认的词边界(默认词边界会把/、_、.、?、:这类符号都当成分隔符,导致误判),直接使用下面的单行pandas代码即可实现需求,无需自定义函数:

import re
import pandas as pd

# 核心匹配逻辑:以字符串开头/|为左边界,以|/字符串结尾为右边界,匹配独立完整词条
result = df[df['Requirements'].str.contains(fr"(?:^|\|)(?:{'|'.join(map(re.escape, req_list))})(?:\||$)")]

代码说明

  • 用re.escape转义目标词中的特殊正则字符,兼容后续目标词出现特殊符号的场景
  • 正则部分拆解:
    • (?:^|\|):匹配字符串起始位置,或者|分隔符,作为目标词条的左边界
    • 中间拼接所有目标词,形成多选匹配分支
    • (?:\||$):匹配|分隔符,或者字符串结束位置,作为目标词条的右边界

错误原因分析

你之前尝试的两种方案失效原因如下:

  1. 字符串替换判空的方案:仅当单元格整体内容完全等于目标词时才会命中,会漏掉同一单元格内用|分隔同时包含目标词和其他内容的行
  2. 默认\b词边界方案:正则默认的词边界规则会将非字母数字的符号(如/、_、.、?、:)识别为词边界,因此2/3 meters、g1_steel、3.3 meters这类内容会被误判为命中

效果验证

针对你给出的包含新增异常模式的测试数据集,上述代码会准确返回符合要求的行:

Name                    Requirements
0   D1  3 meters|2/3 meters|3.5 meters
1   D2                        3 meters
2   D3             3/5 meters|3 meters
4   M1                  steel|g1_steel
5   M2                           steel

所有带额外前后缀的无效条目(D4、D5、D6、D7、M3)都会被正确排除。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:15:41