首页 > 解决方案 > Python中是否有一种有效的方法来对括号之间的字符串进行子集化?

问题描述

med2['Medication'] = ["Terazosin Hydrochloride (Terazosin) oral capsule", "simvastatin oral tablet", "zithromax z-pak (azithromycin) oral tablet", "depo-medrol (methylprednisolone) injectable suspension", "zovirax topical (acyclovir topical) topical ointment", "nystatin oral suspension"]

med3 = pd.DataFrame(med2) # Made a dataframe to try to fix some error messages

med3 = med3['Medication'].str.lower()

我想做两件事:

  1. 选择药物名称(例如上面的“盐酸特拉唑嗪”)和
  2. 选择括号之间的通用名称(对于上面的示例,“特拉唑嗪”)。

对于#1,我列出了“停止”单词/字符(我的真实列表比上面的例子长):

stop = ['(', 'oral', 'nasal', 'inhalation', 'topical', 'sublingual', 'opthalmic', 'otic', 'rectal', 'injectable', 'transdermal', 'vaginal', 'intramuscular', 'dose', 'suspension', 'subcutaneous']

med3['MedShort'] = med3['Medication'][:stop]

对于#2,我制作了“索引”和“结束”:

Index =  med3['Medication'].find('(')
End = med3['Medication'].find(')')

med3['MedGeneric'] = med3['Medication'][Index:End]

但是,天哪,它不起作用吗?你有什么建议?我会很感激!

编辑为一致的变量命名,并道歉。

为了澄清起见,药物治疗并不一致。大多数遵循“药物(通用)给药途径”的模式,但也有相当一部分遵循药物给药途径的模式。感谢您的耐心等待,抱歉我不清楚。\

标签: pythonstringsubstringdata-cleaning

解决方案


如果所有字符串都具有相同的结构,那么

string = "Terazosin Hydrochloride (Terazosin) oral capsule"
drug_name, rest = string.split(" (")
generic = rest.split(")")[0]

print(drug_name.lower(), generic.lower())

将输出terazosin hydrochlorideterazosin


推荐阅读