【问题标题】:Alter the content of a pandas column by regular expression通过正则表达式更改 pandas 列的内容
【发布时间】:2019-01-18 21:38:03
【问题描述】:

我有一个数据框,其中有一列看起来像这样

Other via Other on 17 Jan   2019 
Other via Other on 17 Jan   2019 
Interview via E-mail    on  14  Dec 2018
Rejected via    E-mail  on  15  Jan 2019
Rejected via    E-mail  on  15  Jan 2019
Rejected via    E-mail  on  15  Jan 2019
Rejected via    E-mail  on  15  Jan 2019
Interview via   E-mail  on  14  Jan 2019
Rejected via Website on 12 Jan  2019

是否可以将此列分为两列,一列是“via”之前的内容,另一列是“on”之后的内容?谢谢!

【问题讨论】:

  • 我很确定你可以做到 df[column].split(r'via.*on', expand=True)
  • @MegaBluejay 如果我还想删除原始列中该日期之后的任何内容怎么办?

标签: python pandas dataframe split


【解决方案1】:

使用 str.extract

df[['col1', 'col2']] = df.col.str.extract('(.*)\svia.*on\s(.*)', expand = True)

    col1        col2
0   Other       17 Jan 2019
1   Other       17 Jan 2019
2   Interview   14 Dec 2018
3   Rejected    15 Jan 2019
4   Rejected    15 Jan 2019
5   Rejected    15 Jan 2019
6   Rejected    15 Jan 2019
7   Interview   14 Jan 2019
8   Rejected    12 Jan 2019

【讨论】:

    【解决方案2】:

    您几乎可以将 split() 用作df.col.str.split('via|on',expand=True)[[0,2]

    让我们详细说明一下............

    复制您的 DataFrame:

    >>> df
                                            col
    0         Other via Other on 17 Jan   2019
    1         Other via Other on 17 Jan   2019
    2  Interview via E-mail    on  14  Dec 2018
    3  Rejected via    E-mail  on  15  Jan 2019
    4  Rejected via    E-mail  on  15  Jan 2019
    5  Rejected via    E-mail  on  15  Jan 2019
    6  Rejected via    E-mail  on  15  Jan 2019
    7  Interview via   E-mail  on  14  Jan 2019
    8      Rejected via Website on 12 Jan  2019
    

    让我们看看这里首先根据我们所需的字符串viaon 拆分整个列,这会将整个列col 拆分为三个不同的分隔列0 1 2,其中0 将在字符串via & 2 将在字符串on 之后,其余的将是中间的列1,我们不需要。

    因此,我们可以随意选择列02,如下所示。

    >>> df.col.str.split('via|on',expand=True)[[0,2]]
                0                2
    0      Other    17 Jan   2019
    1      Other    17 Jan   2019
    2  Interview      14  Dec 2018
    3   Rejected      15  Jan 2019
    4   Rejected      15  Jan 2019
    5   Rejected      15  Jan 2019
    6   Rejected      15  Jan 2019
    7  Interview      14  Jan 2019
    8   Rejected      12 Jan  2019
    

    最好分配一个新的数据框并重命名列:

    结果:

    newdf = df.col.str.split('via|on',expand=True)[[0,2]]
    newdf.rename(columns={0: 'col1', 2: 'col2'}, inplace=True)
    print(newdf)
    
             col1             col2
    0      Other      17 Jan   2019
    1      Other      17 Jan   2019
    2  Interview      14  Dec 2018
    3   Rejected      15  Jan 2019
    4   Rejected      15  Jan 2019
    5   Rejected      15  Jan 2019
    6   Rejected      15  Jan 2019
    7  Interview      14  Jan 2019
    8   Rejected      12 Jan  2019
    

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 2020-11-10
      • 2018-11-16
      • 2019-07-25
      • 1970-01-01
      • 2021-07-01
      • 2019-12-24
      • 2017-01-11
      • 1970-01-01
      相关资源
      最近更新 更多