【问题标题】:How to split based on multiple delimiter pandas如何根据多个分隔符 pandas 进行拆分
【发布时间】:2019-05-05 10:55:02
【问题描述】:

我有一个 df 列,其中包含

Phone number
12399422/930201021
5451354;546325642
789888744,656313214
123456654

我想把它分成两列

Phone number1      Phone number2
12399422           930201021
5451354            546325642
789888744          656313214
123456654

我试过用apply,

    df['TELEPHONE1'] = df['TELEPHONE'].str.split(',').str.get(0)
    df['TELEPHONE2'] = df['TELEPHONE'].str.split(',').str.get(1)
    df['TELEPHONE1'] = df['TELEPHONE'].str.split(';').str.get(0)
    df['TELEPHONE2'] = df['TELEPHONE'].str.split(';').str.get(1)
    df['TELEPHONE1'] = df['TELEPHONE'].str.split('/').str.get(0)
    df['TELEPHONE2'] = df['TELEPHONE'].str.split('/').str.get(1)

但它只能拆分'/'谢谢你的帮助

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    只需拆分\D(非数字):

    (df['Phone number'].str.split(r'\D', expand=True)
        .rename(columns=lambda x: f'num{x+1}'))
    
            num1       num2
    0   12399422  930201021
    1    5451354  546325642
    2  789888744  656313214
    3  123456654       None
    

    ...假设电话号码只包含数字。


    或者,使用 extractall 并仅匹配数字:

    df['Phone number'].str.extractall(r'(\d+)')[0].unstack()
    
    match          0          1
    0       12399422  930201021
    1        5451354  546325642
    2      789888744  656313214
    3      123456654        NaN
    

    【讨论】:

      【解决方案2】:

      使用str.split

      df.Phonenumber.str.split('/|;|,',expand=True).add_prefix('Number_')
          Number_0   Number_1
      0   12399422  930201021
      1    5451354  546325642
      2  789888744  656313214
      3  123456654       None
      

      【讨论】:

      • 我正在使用这个df[ColumnName].str.split('[,]',expand=True),但不知道我有三个分隔符。它要么分隔每个字符,要么仅用逗号分隔。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 2020-04-11
      相关资源
      最近更新 更多