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

Python中如何用text.find实现多子串搜索?DataFrame处理遇问题

问题解决:检测招聘启事中的学历关键词

问题根源

你代码里用text.find('bachelor|ba/bs|bs/ba')的问题在于:str.find()不支持正则表达式的管道符|——它会把整个带|的字符串当成一个完整的子串去搜索,而你的招聘文本里显然不会有"bachelor|ba/bs|bs/ba"这种内容,所以每次都返回-1,最终生成全0的列。

修复方案

给你三种可行的修复方式,按需选择:

1. 正则表达式匹配(推荐,支持灵活匹配)

用Python的re模块做正则匹配,支持同时检测多个关键词,还能忽略大小写(适配不同写法的学历表述):

import re

def requires_bachelor(text):    
    # re.search找到任意一个匹配就返回结果,IGNORECASE忽略大小写
    if re.search(r'bachelor|ba/bs|bs/ba', text, flags=re.IGNORECASE):
        return True
    return False

df_jobs['bachelor'] = df_jobs['description'].apply(requires_bachelor).map({True:1, False:0})

2. 逐个检查子串(无需正则)

如果不想用正则,直接遍历关键词列表,检查是否有任意一个出现在文本中:

def requires_bachelor(text):    
    keywords = ['bachelor', 'ba/bs', 'bs/ba']
    # 转小写后匹配,避免大小写遗漏
    return any(keyword in text.lower() for keyword in keywords)

# 直接把布尔值转成整数0/1
df_jobs['bachelor'] = df_jobs['description'].apply(requires_bachelor).astype(int)

3. Pandas内置方法(最简洁高效)

Pandas的str.contains()专门处理字符串列的匹配,比apply()效率更高,代码更短:

import re

# case=False忽略大小写,na=False处理空值(避免生成NaN)
df_jobs['bachelor'] = df_jobs['description'].str.contains(
    r'bachelor|ba/bs|bs/ba', 
    case=False, 
    na=False
).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:55:17