Разделение текста на pandas фрейм данных: работа с другим измерением - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь разбить series на pandas столбцы, но я имею дело со следующей проблемой:

df.head()

                 Opportunity Name     Amount Currency   Amount
       XXXX - XX - 2019 - 01 - 20                 ARS      300 
      YYY - YY - Y -2019 - 01 -21                 CHL      350
       ZZZZ - ZZ - 2019 - 03 - 25                 ARS      500
TT - TT - T - TT - 2019 - 04 - 26                 ARS     1000

Всякий раз, когда я пытаюсь получить новый фрейм данных, где я могу иметь даты в отдельные столбцы. Я использовал str.split() функцию с expands=True с разделителем-разделителем -

df['Opportunity Name'].str.split('-' , expand=True)

Но мои результаты выглядят грязно и трудно выбрать те столбцы с датой, потому что она разбита следующим образом:

          0      1     2     3     4     5     6      
       XXXX     XX  2019    01    20  None  None
        YYY     YY     Y  2019    01    21  None
       ZZZZ     ZZ  2019    03    25  None  None
         TT     TT     T    TT  2019    04    26

Что затрудняет нарезку по этому фрейму данных, я просто хочу извлечь дату из этого строкового столбца фрейма данных

1 Ответ

1 голос
/ 22 апреля 2020
  • Предоставление реальных данных согласуется с показанными образцами данных, в которых символы даты всегда находятся в конце.
  • Используйте встроенную функцию isnumeric и понимание списка для получить числа в списке
  • ''.join([...][-8:]), чтобы объединить только последние 8 символов
  • .to_datetime для преобразования в формат времени данных
df['Date'] = df['Opportunity Name'].apply(lambda x: ''.join([y for y in x if y.isnumeric()][-8:]))
df['Date'] = pd.to_datetime(df['Date'])

print(df)

                    Opportunity Name Amount Currency  Amount       Date
0        XXXX - XX - 32019 - 01 - 20             ARS     300 2019-01-20
1        YYY - YY - Y -2019 - 01 -21             CHL     350 2019-01-21
2         ZZZZ - ZZ - 2019 - 03 - 25             ARS     500 2019-03-25
3  TT - TT - T - TT - 2019 - 04 - 26             ARS    1000 2019-04-26

Получить первое значение

df['first_value'] = df['Opportunity Name'].apply(lambda x: x.split('-')[0].strip())
print(df)

                    Opportunity Name Amount Currency  Amount       Date first_value
0        XXXX - XX - 32019 - 01 - 20             ARS     300 2019-01-20        XXXX
1        YYY - YY - Y -2019 - 01 -21             CHL     350 2019-01-21         YYY
2         ZZZZ - ZZ - 2019 - 03 - 25             ARS     500 2019-03-25        ZZZZ
3  TT - TT - T - TT - 2019 - 04 - 26             ARS    1000 2019-04-26          TT
...