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

基于文本列表为DataFrame新增匹配列的技术实现咨询

高效匹配体育词汇并新增标记列的解决方案

嘿,完全懂你不想写几十条if语句的痛苦!这里有个简洁的办法,用pandas的字符串处理功能就能一次性搞定所有词汇匹配,不用挨个写条件判断。

核心思路

我们可以把体育词汇列表转换成正则表达式的备选模式,然后用pandas的str.extract函数在每行文本里匹配对应的词汇,还能自动处理大小写差异的情况。

完整代码示例

import pandas as pd
import re

# 你的体育词汇列表(哪怕50个也没问题)
sports = ["basketball", "football", "baseball"]

# 示例DataFrame(实际替换成你的数据即可)
df = pd.DataFrame({
    "column_1": [
        "My favourite sport is football",
        "I love to play basketball",
        "Football is a family of team sports that involve, to varying degrees, kicking a ball to score a goal"
    ]
})

# 将词汇列表拼接成正则匹配模式,用|分隔不同词汇
pattern = '|'.join(sports)
# 提取匹配到的词汇,忽略大小写差异
df['other'] = df['column_1'].str.extract(f'({pattern})', flags=re.IGNORECASE)
# 统一转成小写,和原列表词汇格式保持一致
df['other'] = df['other'].str.lower()

# 查看结果
print(df)

代码解释

  • '|'.join(sports):把列表里的词汇拼成basketball|football|baseball这样的正则规则,意思是匹配任意一个出现在列表里的词汇
  • str.extract(..., flags=re.IGNORECASE):在每行文本里提取第一个匹配到的体育词汇,flags参数确保不管是大写还是小写的词汇都能被识别(比如示例里的Football会被匹配到)
  • 最后转小写是为了让结果和原列表的词汇格式统一,避免出现大小写不一致的情况

如果你的文本里一行可能出现多个体育词汇,想要提取所有匹配项的话,可以把str.extract换成str.findall,然后用str.join把结果拼接成字符串,比如:

df['other'] = df['column_1'].str.findall(pattern, flags=re.IGNORECASE).str.join(', ')
df['other'] = df['other'].str.lower()

这样不管列表里有多少词汇,都能一次性处理完成,再也不用写一堆if语句啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:17:52