【问题标题】:Elegant regex using pandas - extract dose info使用 pandas 的优雅正则表达式 - 提取剂量信息
【发布时间】:2021-06-27 04:17:12
【问题描述】:

我有一个如下图所示的数据框

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,但它被分成了两部分(这是不正确的)

另一个提示是我知道我所有的剂量值都将以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,因为它满足我的提示

所以,我希望我的输出如下所示

【问题讨论】:

    标签: python regex pandas string dataframe


    【解决方案1】:

    怎么样

    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*

    • mc 之类的前缀可能存在 [mc]*

    • 预计真正的单位会在那里[lg]+

    • 在这些/*的末尾可以选择斜杠

    第二部分对此稍作修改,具体

    • 斜线后面可能有也可能没有数字,即\d*
    • 这整个部分是可选的?
    • 不被捕获?:

    我们使用不区分大小写来节省M 等的一些空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多