【问题标题】:How can I split a pandas string column using different key words?如何使用不同的关键字拆分熊猫字符串列?
【发布时间】:2021-03-09 14:48:02
【问题描述】:

我需要将一列(pandas 数据框的一部分)拆分为单元格中描述的列。我尝试使用 split(":") ,但它会在有几个小时的地方分裂。请问有什么建议吗?我想从这个出发: enter image description here

DOSE: 20 mg - ROUTE: oral  (morning) - START: 01/Jan/20 15:39:00

对此: enter image description here

Dose     Route           Start                 Stop
20 mg    oral(morning)  01/jan/20  15:39:00    01/07/2020  15:39:00

【问题讨论】:

    标签: regex pandas split


    【解决方案1】:

    你可以使用

    >>> import pandas as pd
    >>> pattern = r"^DOSE:\s*(?P<Dose>.*?)\W+ROUTE:\s*(?P<Route>.*?)\W+START:\s*(?P<Start>.*?)(?:\W+STOP:\s*(?P<Stop>.*)|$)"
    >>> df = pd.DataFrame({'Description':["DOSE: 20 mg - ROUTE: oral  (morning) - START: 01/Jan/20 15:39:00", "DOSE: 20 mg - ROUTE: oral  (morning) - START: 01/Jan/20 15:39:00 STOP: 05/Feb/20 12:33:45"]})
    >>> df["Description"].str.extract(pattern).fillna("")
        Dose           Route               Start                Stop
    0  20 mg  oral  (morning  01/Jan/20 15:39:00                    
    1  20 mg  oral  (morning  01/Jan/20 15:39:00  05/Feb/20 12:33:45
    

    请参阅regex demo

    详情

    • ^ - 字符串开头
    • DOSE: - 文字文本
    • \s* - 0+ 个空格
    • (?P&lt;Dose&gt;.*?) - 组“剂量”:任何零个或多个字符,尽可能少
    • \W+ - 一个或多个非单词字符
    • ROUTE:\s* - ROUTE: 和零个或多个空格
    • (?P&lt;Route&gt;.*?) - 组“路线”:任何零个或多个字符,尽可能少
    • \W+START:\s* - 一个或多个非单词字符,START: 和零个或多个空格
    • (?P&lt;Start&gt;.*?) - 组“开始”:任何零个或多个字符,尽可能少
    • (?:\W+STOP:\s*(?P&lt;Stop&gt;.*)|$) - 要么
      • \W+STOP:\s*(?P&lt;Stop&gt;.*) - 一个或多个非单词字符,STOP: 和零个或多个空格,然后“停止”组捕获任何零个或多个字符,尽可能少
      • | - 或
      • $ - 字符串结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 2021-08-05
      • 2023-02-10
      • 2015-06-25
      相关资源
      最近更新 更多