如何在Python中匹配DataFrame指定短语并输出其后续单词?
需求与解决方案
需求
给定短语列表:
pre = ["unable to", "would not", "was not", "did not", "there is not", "could not", "failed to"]
需要在DataFrame的文本列中查找包含上述短语的内容,生成新列,输出该短语加上后续的一个单词。例如,当单元格文本为WOULD NOT PRIME CORRECTLY DURING VIRECTOMY.时,新列需输出WOULD NOT PRIME。
原代码问题
你尝试的代码存在逻辑错误:
def matcher(Event_Description): for i in pre: if i in Event_Description: return i + 1 return "Not found"
i + 1是字符串与数字相加,会直接触发报错- 未实现"提取后续单词"的核心逻辑
- 没有处理大小写不匹配的问题(示例文本为大写,列表短语为小写)
正确实现方法
使用正则表达式匹配短语及后续单词,同时兼容大小写差异:
import re import pandas as pd # 定义目标短语列表 pre = ["unable to", "would not", "was not", "did not", "there is not", "could not", "failed to"] # 构建正则模式:匹配任意短语+后续一个单词,忽略大小写 # re.escape避免短语中的特殊字符干扰正则匹配 pattern = re.compile(r'(' + '|'.join(re.escape(p) for p in pre) + r')\s+\w+', re.IGNORECASE) def matcher(text): match_result = pattern.search(text) if match_result: # 返回匹配到的完整内容(短语+后续单词) return match_result.group(0) return "Not found" # 示例DataFrame df = pd.DataFrame({ 'Event_Description': [ "WOULD NOT PRIME CORRECTLY DURING VIRECTOMY.", "PATIENT WAS NOT RESPONDING TO TREATMENT.", "NO ISSUES DETECTED." ] }) # 生成新列 df['Extracted_Phrase'] = df['Event_Description'].apply(matcher) print(df)
代码说明
- 正则模式:用
|连接所有短语,re.escape处理短语中的特殊字符,\s+\w+匹配短语后的一个单词(空格+字母/数字组合) - 大小写兼容:
re.IGNORECASE参数确保大写文本也能匹配小写短语 - 匹配逻辑:
re.search查找文本中第一个符合模式的内容,找到则返回匹配结果,否则返回"Not found"
输出结果
Event_Description Extracted_Phrase 0 WOULD NOT PRIME CORRECTLY DURING VIRECTOMY. WOULD NOT PRIME 1 PATIENT WAS NOT RESPONDING TO TREATMENT. WAS NOT RESPONDING 2 NO ISSUES DETECTED. Not found
内容的提问来源于stack exchange,提问作者Victor Leon
相关产品推荐
相关产品推荐

