pandas药物数据挖掘:如何筛选包含而非完全匹配目标术语的记录
实现包含目标术语的药物记录筛选
原代码存在的不足
- 采用
==做字段值精确匹配,仅能命中Drug Name字段值完全等于OLMESARTAN的记录,无法覆盖OLMESARTAN MEDOXOMIL、复方制剂中携带该成分名的各类变体 - 存在冗余实现:逐行手动拆分文本转tuple、重复初始化DataFrame、手动调用文件close方法,拉低运行效率且易触发异常
可直接运行的优化代码
import pandas as pd # 读取$分隔的结构化文件,仅加载业务需要的列降低内存占用 drug_df = pd.read_csv( 'DRUG20Q4.txt', sep='$', header=None, dtype=str, usecols=[0, 3, 5], names=['PrimaryID', 'Role', 'Drug Name'] ) # 筛选Drug Name字段包含目标术语的全部记录 target_df = drug_df[ drug_df['Drug Name'].str.contains( pat='OLMESARTAN', case=False, # 忽略大小写差异,覆盖样例中"Olmesartan"这类大小写变体 na=False # 对空值直接过滤,避免空值触发匹配报错 ) ]
实用优化提示
- 该匹配逻辑可自动覆盖所有Drug Name字段内嵌入目标术语的记录,不需要手动穷举各类药物名称变体
- 若需避免误匹配拼写相近的无关字符串,可将匹配规则调整为带单词边界的正则:
pat=r'\bOLMESARTAN\b',仅匹配独立成词的目标术语 with上下文管理器会自动在代码块执行完成后关闭文件流,原代码中手动书写的fileDrug20Q4.close()属于冗余代码,建议移除- 原代码中两次嵌套初始化DataFrame的写法属于冗余操作,可直接为筛选结果赋值,不需要反复调用DataFrame构造器
内容的提问来源于stack exchange,提问作者Stephen Lee
相关产品推荐
相关产品推荐

