Как разобрать разные форматы строковых дат? - PullRequest
0 голосов
/ 12 января 2020

Работа над таблицей со смесью различных строк, в которых можно получить дату.

    period
0   Q2 '20 Base
1   Q3 '20 Base
2   Q1 '21 Base
3   February '20 Base
4   March '20 Peak
5   Summer 22 Base
6   Winter 20 Peak
7   Summer 21 Base
8   Year 2021
9   October '21 Peak

Я бы хотел иметь возможность преобразовать это в метку времени для анализа в python. Во-первых, в идеале я хочу разобрать на 4 новых столбца 1) день 2) месяц 3) квартал 4) год. Затем используйте эти столбцы для создания даты и времени (ДД-ММ-ГГГГ).

    period             day  month quarter year
0   Q2 '20 Base         01  04    1       2020
1   Q3 '20 Peak         01  07    3       2020
2   Q1 '21 Base         01  01    1       2021
3   February '20 Base   01  02    1       2020
4   March '20 Peak      01  03    1       2020
5   Summer 22 Base      01  04    2       2022
6   Winter 20 Peak      01  10    4       2020
7   Summer 21 Base      01  04    2       2021
8   Year 2021           01  01    1       2021
9   October '21 Base    01  10    4       2021

Как я могу разобрать это в 4 новых столбца?

1 Ответ

1 голос
/ 12 января 2020

Моя идея состоит в том, чтобы настроить структуру словарных данных для ваших идентификаторов, например:

datemap = { 'January' :  {'day' : 1, 'month' : 1, 'quarter' : 1}, 
            'February' : {'day' : 1, 'month' : 2, 'quarter' : 1}, 
            'March' :    {'day' : 1, 'month' : 3, 'quarter' : 1}, 
            # and so on ...
            'Spring' : {'day' : 1, 'month' : 1, 'quarter' : 1}, 
            'Summer' : {'day' : 1, 'month' : 4, 'quarter' : 2}, 
            'Fall' :   {'day' : 1, 'month' : 7, 'quarter' : 3}, 
            'Winter' : {'day' : 1, 'month' : 10, 'quarter' : 4}, 
            'Q1' : {'day' : 1, 'month' : 1, 'quarter' : 1}, 
            'Q2' : {'day' : 1, 'month' : 4, 'quarter' : 2}, 
            'Q3' : {'day' : 1, 'month' : 7, 'quarter' : 3}, 
            'Q4' : {'day' : 1, 'month' : 10, 'quarter' : 4}, 
            'Year' : {'day' : 1, 'month' : 1, 'quarter' : 1} }

Затем вы можете преобразовать заданное значение r['period'], посмотрев на первое слово r['period'].split()[0] (или второе слово за год) вот так:

df['day'] = df.apply (lambda r: datemap[r['period'].split()[0]]['day'], axis=1)
df['month'] = df.apply (lambda r: datemap[r['period'].split()[0]]['month'], axis=1)
df['quarter'] = df.apply (lambda r: datemap[r['period'].split()[0]]['quarter'], axis=1)
df['year'] = df.apply (lambda r: "20" + r['period'].split()[1][-2:], axis=1)
...