Pandas разделить столбец на несколько столбцов через замену строки или регулярное выражение - PullRequest
0 голосов
/ 03 февраля 2020

У меня в столбце данных есть «Столбец», который в оптимальных условиях выглядит следующим образом:

Client: Stack Overflow   Order Num: 123456  Account From: 3656645654   Account to: 546546578

Я хочу разбить этот столбец на несколько столбцов, например:

'Client','Order Num', 'Account From','Account to'

Но в некоторых случаях у меня нет клиента, номера заказа и счетов в столбце

Я делаю это так:

for x in len(df.columns):
   if 'Client' in df.loc[x,'Columnn']:
      df.loc[x,'Client'] = str(df.loc[x,'Column']).split('Client: ')[1]
      if 'Order Num' in df.loc[x,'Client']:
         df.loc[x,'Client'] = str(df.loc[x,'Client']).split('Order Num: ')[0]
      if 'Account From' in df.loc[x,'Client']:
         df.loc[x,'Client'] = str(df.loc[x,'Client']).split('Account From: ')[0]
      if 'Account to' in df.loc[x,'Client']:
         df.loc[x,'Client'] = str(df.loc[x,'Client']).split('Account to: ')[0]
   else:
      df.loc[x,'Client'] = ''

И так далее для всех столбцы, которые я хочу создать.

Эта часть сценария занимает почти 40 строк и работает очень медленно.

У вас есть более «pandasti c» решение?

1 Ответ

2 голосов
/ 03 февраля 2020

Попробуйте использовать строковый метод доступа, .str и extract с именованными группами, используя регулярное выражение:

df['col1'].str.extract('Client: (?P<Client>.*) Order Num: (?P<OrderNum>.*) Account From: (?P<AccountFrom>.*) Account to: (?P<AccountTo>.*)')

Вывод:

             Client OrderNum   AccountFrom  AccountTo
0  Stack Overflow    123456   3656645654    546546578
...