Как разделить на основе нескольких панд разделителей - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть столбец 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)

но это может только разделить '/' Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Просто разделить на \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
0 голосов
/ 04 декабря 2018

Использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...