首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用熊猫的优雅规范-提取剂量信息

使用熊猫的优雅规范-提取剂量信息
EN

Stack Overflow用户
提问于 2021-03-31 06:49:08
回答 1查看 67关注 0票数 1

我有如下所示的数据框架

代码语言:javascript
复制
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%的准确性,我想问你,我如何才能做到最简单的方式或稳健的方式,以尽量减少捕获不需要的信息。

例如,我尝试了下面的内容,它产生了一个不正确的输出。

代码语言:javascript
复制
df['text_1'].str.findall('[0-9]+\s*[mgMG/lLcC]+')

最后一行应该是5ML/10ML,但它被分成两行(这是不正确的)

另一个提示是,我知道我所有的剂量值都将从number optionally followed by a space and unit like MG, MCGMLGgmgmcgml等开始。

例如:WHITE SOFT PARAFFIN 100G,我想提取100G。同样,对于VITAMIN B12 1MG/ML INJ 10ML,我想提取1MG/ML and 10ML。我们提取1MG/ML10ML,因为它满足我的提示。

因此,我希望我的输出如下所示

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-31 07:18:02

怎么样

代码语言:javascript
复制
df.text_1.str.findall(r"\d+\s*[mc]*[lg]+/*(?:\d*\s*[mc]*[lg]+)?", flags=re.IGNORECASE)

产出:

代码语言:javascript
复制
0                    [100G]
1            [1MG/ML, 10ML]
2    [100mg, 200mg, 200mcg]
3                    [100G]
4                     [5ML]
5                     [5MG]
6                [5ML/10ML]
Name: text_1, dtype: object

关于regex:

\d+

  • 我们至少需要一些数字:

\s*空间是可选的

  • 空间

[mc]*

  • mc这样的前缀可能在那里

[lg]+

  • ,真正的单位预计在那里

在这些/*的末尾,斜杠

  • 是可选的。

第二部分稍作修改,特别是

在斜杠后,数字可能存在,也可能不存在,即\d*

  • this整体是可选的,?

  • and不被捕获,?:

我们使用不区分大小写的方法,从M等方面节省一些空间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66882946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档