如何在pandas中通过字符串搜索为字符串列分配多个额外标签
问题根因
你当前使用的str.extract()方法仅会返回每条文本中第一个匹配到的正则分组,因此只会输出首个命中的标签,无法捕获同一条文本中多个匹配的分类。
解决方案1:按分类逐次判断命中(易读易维护)
遍历所有分类,直接判断每条文本是否包含该分类下的任意关键词,最后聚合所有命中的分类:
import pandas as pd entertainment_dict = { "Food": ["McDonald", "Five Guys", "KFC"], "Music": ["Taylor Swift", "Jay Z", "One Direction"], "TV": ["Big Bang Theory", "Queen of South", "Ted Lasso"] } data = {'text':["Kevin Lee has bought a Taylor Swift's CD and eaten at McDonald.", "The best burger in McDonald is cheeze buger.", "Kevin Lee is planning to watch the Big Bang Theory and eat at KFC."]} df = pd.DataFrame(data) # 逐个分类判断是否命中 for label, keywords in entertainment_dict.items(): keyword_regex = '|'.join(keywords) df[label] = df['text'].str.contains(keyword_regex, regex=True) # 聚合所有命中的标签 df['labels'] = df.apply(lambda row: ','.join([k for k in entertainment_dict.keys() if row[k]]), axis=1) # 可选:删除中间生成的分类判断列 df = df.drop(columns=entertainment_dict.keys())
输出结果:
text labels 0 Kevin Lee has bought a Taylor Swift's CD and e... Music,Food 1 The best burger in McDonald is cheeze buger. Food 2 Kevin Lee is planning to watch the Big Bang Th... TV,Food
解决方案2:基于str.extractall实现
如果你希望继续沿用原有正则分组匹配的逻辑,可以改用str.extractall()捕获所有匹配项,再聚合标签,和原有代码兼容性更高:
import pandas as pd entertainment_dict = { "Food": ["McDonald", "Five Guys", "KFC"], "Music": ["Taylor Swift", "Jay Z", "One Direction"], "TV": ["Big Bang Theory", "Queen of South", "Ted Lasso"] } data = {'text':["Kevin Lee has bought a Taylor Swift's CD and eaten at McDonald.", "The best burger in McDonald is cheeze buger.", "Kevin Lee is planning to watch the Big Bang Theory and eat at KFC."]} df = pd.DataFrame(data) regex = '|'.join(f'(?P<{k}>{"|".join(v)})' for k,v in entertainment_dict.items()) # 提取所有匹配项,按行聚合标签 matches = df['text'].str.extractall(regex).notnull().groupby(level=0).any() df['labels'] = matches.apply(lambda r: ','.join([k for k in entertainment_dict.keys() if r[k]]), axis=1)
两种方案均支持任意数量的多标签匹配:方案1代码更易懂,适合需要频繁调整分类规则的场景;方案2执行效率更高,适合分类数量多、数据量大的场景。
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

