基于文本列表为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
相关产品推荐
相关产品推荐

