Pandas按关键词列表顺序重排文本关键词(保留XS后缀)实现咨询
Pandas指定关键词绑定后缀的排序处理实现
核心实现逻辑
- 逐行扫描文本,把符合要求的「核心关键词+可选XS后缀」片段全部识别出来,关键词前面的普通文本(比如"The"、"He was a"这类内容)完全保留,不做改动
- 记录原来夹在两个关键词之间的分隔符(比如逗号、"or"这类连接词),处理的时候不替换原有连接格式
- 把识别到的关键词,按照预设的
keywords列表的顺序重新排,不管原来的位置在哪:Small永远排第一、Medium排第二、Large排第三,带XS后缀的关键词跟着对应的核心关键词走,不单独调整位置 - 排序完的关键词,用原来的分隔符串起来,和前缀拼回成完整句子
具体实现步骤
导入依赖库、定义匹配正则
正则加入单词边界避免误匹配普通文本中的关键词片段,把可选项XS和核心关键词绑定为一个整体捕获:import re keywords = ['Small', 'Medium', 'Large'] # 匹配规则:核心关键词 + 可选的空格+XS,带单词边界避免误匹配 pattern = re.compile(r'\b(' + '|'.join(keywords) + r')(?:\sXS)?\b')注意:正则里的单词边界
\b是必要的,避免把嵌入在其他单词里的关键词误识别,比如不会把"Smalltalk"里的"Small"、"XLarge"里的"Large"当成目标匹配项。编写逐行处理的自定义函数
函数逻辑完全匹配目标输出的格式要求:def process_row(text): # 找出当前行所有关键词匹配的位置和内容 matches = list(pattern.finditer(text)) # 没有匹配到关键词,直接返回原文本 if not matches: return text # 提取第一个关键词之前的固定前缀,完全保留 prefix = text[:matches[0].start()] # 收集所有关键词片段,以及它对应的核心关键词在预设列表中的索引(用于排序) keyword_items = [] for match in matches: core_word = match.group(1) # 提取核心关键词 full_word = match.group(0) # 提取带XS的完整关键词片段 sort_index = keywords.index(core_word) # 核心关键词的固定排序值 keyword_items.append( (sort_index, full_word) ) # 按预设顺序对关键词排序 sorted_keywords = [item[1] for item in sorted(keyword_items, key=lambda x: x[0])] # 提取相邻关键词之间的原始分隔符 separators = [] for i in range(len(matches)-1): # 两个关键词结束到下一个关键词开始之间的内容就是原始分隔符 sep = text[matches[i].end(): matches[i+1].start()] separators.append(sep) # 按原分隔符拼接最终文本 result = prefix + sorted_keywords[0] for i in range(len(separators)): result += separators[i] + sorted_keywords[i+1] return result应用到DataFrame列完成批量处理
df['processed_column'] = df['column'].apply(process_row)
效果验证
把示例中的三行文本代入函数处理,输出结果和目标效果完全一致:
- 原行
The Small, Large, Medium→ 输出The Small, Medium, Large - 原行
The fast Medium, Small XS→ 输出The fast Small XS, Medium(XS后缀随Small一同排在最前) - 原行
He was a Medium, Large or Small→ 输出He was a Small, Medium or Large
内容的提问来源于stack exchange,提问作者asd
相关产品推荐
相关产品推荐

