如何基于多个定界符 pandas 进行拆分

新手上路,请多包涵

我有一个 df 列,其中包含

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

我想把它分成两列

Phone number1      Phone number2
12399422           930201021
5451354            546325642
789888744          656313214
123456654

我试过使用申请,

     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)

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

原文由 Platalea Minor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 721
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

原文由 BENY 发布,翻译遵循 CC BY-SA 4.0 许可协议

只是拆分 \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

原文由 cs95 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题