【问题标题】:Python Pandas split column into two columns based on last element and remaining elementsPython Pandas 根据最后一个元素和剩余元素将列拆分为两列
【发布时间】:2020-11-14 11:48:37
【问题描述】:

我想将名为period 的列拆分为新的两列。在一个新列中,我想返回 period 中的最后一个元素,第二个新列是所有剩余的元素。

我的数据框使用虚拟数据看起来像这样:

import pandas as pd 

d = {'period': ['May \'20 Base',
                'June \'20 Peaks',
                'Friday Base',
                '24/07/2020 XY1+XY2',
                '01-02 August \'20 Peaks',
                'June \'20 XY1+XY2+XY3']
    }

df = pd.DataFrame(data=d)

所需的输出:

                  period              colA         colB
0            May '20 Base           May '20         Base
1          June '20 Peaks          June '20        Peaks
2             Friday Base            Friday         Base
3      24/07/2020 XY1+XY2        24/07/2020      XY1+XY2
4  01-02 August '20 Peaks  01-02 August '20        Peaks
5    June '20 XY1+XY2+XY3          June '20  XY1+XY2+XY3

我的尝试:

我可以返回 period 中的最后一个元素,但我不能返回所有剩余元素,这些元素在 1-3 个元素之间变化。

df['colB'] = df.period.str.split().str[-1]

【问题讨论】:

    标签: python regex pandas split


    【解决方案1】:

    你可以使用

    (.+)\s+(\S+)$
    

    a demo on regex101.com

    【讨论】:

      【解决方案2】:

      您可以使用以下模式:

      pat = '^(?P<colA>.*) (?P<colB>\S+)$'
      df.join(df.period.str.extract(pat))
      

      输出:

                         period              colA         colB
      0            May '20 Base           May '20         Base
      1          June '20 Peaks          June '20        Peaks
      2             Friday Base            Friday         Base
      3      24/07/2020 XY1+XY2        24/07/2020      XY1+XY2
      4  01-02 August '20 Peaks  01-02 August '20        Peaks
      5    June '20 XY1+XY2+XY3          June '20  XY1+XY2+XY3
      

      【讨论】:

      • 你能快速解释一下为什么它是提取而不是拆分吗?还有你为什么用join?
      • 我只是想使用extract,因为它使用regex 捕获更多逻辑。您可以像这样使用rsplitdf.period.str.rsplit(' ', n=1, expand=True)。关注join,这是一种将结果连接到原始数据中的便捷方式。
      猜你喜欢
      • 1970-01-01
      • 2017-04-25
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多