Python 使用熊猫的优雅正则表达式-提取剂量信息
我有一个如下所示的数据框Python 使用熊猫的优雅正则表达式-提取剂量信息,python,regex,pandas,string,dataframe,Python,Regex,Pandas,String,Dataframe,我有一个如下所示的数据框 df = pd.DataFrame({'text_1':['WHITE SOFT PARAFFIN 100G', 'VITAMIN B12 1MG/ML INJ 10ML','vitamin B1 100mg, B6 200mg, B12 200mcg tab','UREA CREAM 10% BP 100G', 'TOBRAMYCIN 0.3%/DEXA 1% EYE DROP 5ML','TERAzosin 5MG TAB (HYTRIN)','SODIUM CHL
df = pd.DataFrame({'text_1':['WHITE SOFT PARAFFIN 100G', 'VITAMIN B12 1MG/ML INJ 10ML','vitamin B1 100mg, B6 200mg, B12 200mcg tab','UREA CREAM 10% BP 100G', 'TOBRAMYCIN 0.3%/DEXA 1% EYE DROP 5ML','TERAzosin 5MG TAB (HYTRIN)','SODIUM CHLORIDE 0.9% EYE DROP 5ML/10ML']})
我想从样本数据框中显示的药物列表中提取剂量信息
虽然,我能够达到90%的准确率,但我想与您核实一下,我如何以简单的方式或稳健的方式来最大限度地减少捕获不需要的信息
例如,我尝试了下面的方法,但结果不正确
df['text_1'].str.findall('[0-9]+\s*[mgMG/lLcC]+')
最后一行应该是5ML/10ML
,但它被分成两行(这是不正确的)
另一个提示是,我知道我的所有剂量值都将以数字开始,后面有一个空格和单位,如MG、MCG
、ML
、G
、MG
、MCG
或ML
等
例如:白色软石蜡100G
,我想提取100G
。同样,对于10ML
注射液中的维生素B12 1MG/ML,我想提取1MG/ML和10ML
。我们提取了1MG/ML
和10ML
,因为它满足了我的提示
因此,我希望我的输出如下
怎么样
df.text_1.str.findall(r“\d+\s*[mc]*[lg]+/*(?:\d*\s*[mc]*[lg]+)?”,flags=re.IGNORECASE)
输出:
0 [100G]
1 [1MG/ML, 10ML]
2 [100mg, 200mg, 200mcg]
3 [100G]
4 [5ML]
5 [5MG]
6 [5ML/10ML]
Name: text_1, dtype: object
关于正则表达式:
- 我们至少需要一些数字:
\d+
- 空格是可选的
\s*
- 像
m
或c
这样的前缀可能存在[mc]*
- 实际装置预计将在那里
[lg]+
- 在这些
/*
第二部分是对本部分稍加修改的部分,具体来说
- 斜杠后面可能有数字,也可能没有数字,即
\d*
- 整个部分是可选的
?
- 而不是被捕获
?:
我们使用大小写不敏感来节省M
等的空间