Столбец даты и времени имеет смешанный формат - PullRequest
0 голосов
/ 30 апреля 2019

У меня возникли проблемы с форматированием даты и времени.У меня есть файл данных, который содержит дату и время.Ниже приведена примерная дата, представляющая часть моих данных.

data = pd.DataFrame()
data['Date'] = ['01 Jul 2014 - Qualification','30 Sep 2014 - Group Stage','17 Mar 2015 - Play Offs',' 19:00:00']
data ['ID'] = [1,2,3,4]

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

data['date1'] = pd.to_datetime(data.Date,errors = 'coerce')

Я получил все NaT во время даты.Я также хотел создать два новых столбца, таких как столбец Время и этап, чтобы представить время и этап игры.

Могу ли я узнать, как решить проблему?

Спасибо,

Zep

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Здесь вы можете использовать регулярные выражения с Series.str.extract:

#https://stackoverflow.com/a/47656743
pat = r'(\d+/\d+(?:/\d+)?|(?:\d+ )?(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)[.,]?(?:-\d+-\d+| \d+(?:th|rd|st|nd)?,? \d+| \d+)|\d{4})'

#https://stackoverflow.com/a/46069885
pat = r'((?:\d{,2}\s)?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*(?:-|\.|\s|,)\s?\d{,2}[a-z]*(?:-|,|\s)?\s?\d{2,4})'

s = data['Date'].str.extract(pat, expand=False)
data['date1']  = pd.to_datetime(s, errors = 'coerce')
print (data)
                          Date  ID      date1
0  01 Jul 2014 - Qualification   1 2014-07-01
1    30 Sep 2014 - Group Stage   2 2014-09-30
2      17 Mar 2015 - Play Offs   3 2015-03-17
3                     19:00:00   4        NaT
1 голос
/ 30 апреля 2019

В столбце Date есть текст, отличный от даты / времени.Вы не можете преобразовать его в объект даты и времени как есть.Вы должны изолировать часть текста в дате и времени от остальной части.Для этого вы можете разделить на - и развернуть, чтобы получить текст и дату этапа в отдельных столбцах временного фрейма данных df_temp, а затем использовать эти столбцы для назначения и создания каждого в существующем фрейме данных:

In [27]: df_temp = data['Date'].str.split('-', expand=True)

In [28]: data['date1'] = df_temp[0]

In [29]: data['stage'] = df_temp[1]

In [30]: data
Out[30]:
                          Date  ID         date1           stage
0  01 Jul 2014 - Qualification   1  01 Jul 2014    Qualification
1    30 Sep 2014 - Group Stage   2  30 Sep 2014      Group Stage
2      17 Mar 2015 - Play Offs   3  17 Mar 2015        Play Offs
3                     19:00:00   4      19:00:00            None

In [31]: data['date1'] = pd.to_datetime(data.date1,errors = 'coerce')

In [32]: data
Out[32]:
                          Date  ID      date1           stage
0  01 Jul 2014 - Qualification   1 2014-07-01   Qualification
1    30 Sep 2014 - Group Stage   2 2014-09-30     Group Stage
2      17 Mar 2015 - Play Offs   3 2015-03-17       Play Offs
3                     19:00:00   4        NaT            None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...