如何使用Pandas从数据集列中提取全大写单词或词组?
提取文本中的全大写品牌名
需求说明
给定如下数据集列:
col AMPCO Impact Socket MEGGAR HARLEY Impact Socket
需要提取每行开头的全大写内容,目标结果为AMPCO、MEGGAR HARLEY(或仅提取单个全大写单词如MEGGAR)。
问题分析
你之前尝试的res = list(filter(lambda c: c.isupper(), test_str[:1]))存在两个核心问题:
- 仅截取字符串第一个字符判断,覆盖范围过窄
- 逐个字符筛选,无法识别由空格分隔的多个全大写单词
解决方案
方法1:正则表达式(推荐)
利用正则匹配开头的连续全大写单词序列(支持空格分隔的多个全大写单词):
import re # 待处理数据 texts = ["AMPCO Impact Socket", "MEGGAR HARLEY Impact Socket"] # 匹配开头的一个/多个全大写单词(允许单词间有空格) pattern = r'^([A-Z]+(?:\s[A-Z]+)*)' extracted = [re.match(pattern, text).group(1) for text in texts if re.match(pattern, text)] print(extracted) # 输出: ['AMPCO', 'MEGGAR HARLEY']
如果仅需要提取第一个全大写单词(如第二行只取MEGGAR),修改正则为r'^([A-Z]+)'即可,输出会变为['AMPCO', 'MEGGAR']。
方法2:分割筛选
通过分割字符串,逐个判断单词是否全大写,直到遇到非全大写单词为止:
texts = ["AMPCO Impact Socket", "MEGGAR HARLEY Impact Socket"] extracted = [] for text in texts: words = text.split() brand_parts = [] for word in words: if word.isupper(): brand_parts.append(word) else: break extracted.append(' '.join(brand_parts)) print(extracted) # 输出: ['AMPCO', 'MEGGAR HARLEY']
内容的提问来源于stack exchange,提问作者anu srivastava
相关产品推荐
相关产品推荐

