Расщепление струны с помощью нескольких уникальных сплиттеров в пандах - PullRequest
0 голосов
/ 12 октября 2018

Один из столбцов является строкой.Я хочу разбить строку, но в ней нет уникального символа для использования в качестве разделителя.Ниже приведен пример фрейма данных:

`df = pd.DataFrame({'Name':['John','David'],'Occupation':['CEO','Dep Dir'],'Contact':['HP No-Mobile Ph 123:456','Off-Mobile Ph 152:256']},`)

Я хотел разделить контакт.Мой желаемый результат будет следующим: My Desired output

Я использовал следующий код для разделения на '-'.

df[['Contact1','Contact2']] = df.Contact.str.split('[-]',expand=True)

Но вывод неформат, который я хотел.Может ли кто-нибудь помочь мне с этим, что это конкретная проблема, которую я не могу найти.Спасибо,

Zep

Ответы [ 3 ]

0 голосов
/ 12 октября 2018
df[['Contact1','Contact2']] = df['Contact'].str.split('-' or ' ',expand=True)
df.Contact2 = df.Contact2.str.split(' ').str[:-1].apply(' '.join)

Out:

              Contact       Name    Occupation  Contact1    Contact2
0   HP No-Mobile Ph 123:456 John    CEO          HP No     Mobile Ph
1   Off-Mobile Ph 152:256   David   Dep Dir       Off      Mobile Ph
0 голосов
/ 12 октября 2018

Я полагаю, вам нужно split на - для 2 столбцов, а затем rsplit по последнему пробелу:

df[['Contact1','Contact2']] = df.Contact.str.split('-',expand=True)
df['Contact2'] = df['Contact2'].str.rsplit(n=1).str[0]
print (df)
    Name Occupation                  Contact Contact1   Contact2
0   John        CEO  HP No-Mobile Ph 123:456    HP No  Mobile Ph
1  David    Dep Dir    Off-Mobile Ph 152:256      Off  Mobile Ph
0 голосов
/ 12 октября 2018

Сначала нарежьте ненужные данные, а затем используйте split (Предполагая, что длина данных Ph постоянна):

df[['Contact1','Contact2']] = df.Contact.str[:-8].str.split('[-]',expand=True)

Если данные после Ph не постоянны, используйте extract для алфавитов и пробелов:

df[['Contact1','Contact2']] = df.Contact.str.split('[-]',expand=True)
df['Contact2'] = df.Contact2.str.extract('([a-zA-Z ]+)')[0].str.rstrip()

df = pd.DataFrame({'Name':['John','David'],
                   'Occupation':['CEO','Dep Dir'],
                   'Contact':['HP No-Mobile Ph 123:456','Off-Mobile Ph']},)

print(df)
    Name Occupation                  Contact
0   John        CEO  HP No-Mobile Ph 123:456
1  David    Dep Dir            Off-Mobile Ph

df[['Contact1','Contact2']] = df.Contact.str.split('[-]',expand=True)
print(df)

    Name Occupation                  Contact Contact1           Contact2
0   John        CEO  HP No-Mobile Ph 123:456    HP No  Mobile Ph 123:456
1  David    Dep Dir            Off-Mobile Ph      Off          Mobile Ph

df['Contact2'] = df.Contact2.str.extract('([a-zA-Z ]+)')[0].str.rstrip()
print(df)

    Name Occupation                  Contact Contact1   Contact2
0   John        CEO  HP No-Mobile Ph 123:456    HP No  Mobile Ph
1  David    Dep Dir            Off-Mobile Ph      Off  Mobile Ph
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...