Как правильно отформатировать дату и время - PullRequest
0 голосов
/ 21 января 2020

Мы боремся с форматированием даты и времени в Python 3, и мы не можем понять это сами. Пока что мы отформатировали наш фрейм данных для даты и времени, так что он должен быть '%Y-%m-%d %H:%M:%S':

до

  • 02-01-2011 22: 00: 00

после

  • 2011-01-02 22: 00: 00

По какой-то очень странной причине, когда datetime равен

  • 13-01-2011 00: 00: 00

изменяется на это

  • 2011-13-01 00: 00: 00

И оттуда он смешивает месяцы с днями и поэтому считает месяцы вместо дней.

Это весь наш код для этого форматирования даты и времени:

df['local_date']=df['local_date'] + ':00'
df['local_date'] = pd.to_datetime(df.local_date)

df['local_date']=df['local_date'].dt.strftime('%Y-%m-%d %H:%M:%S')

ОБНОВЛЕННЫЙ КОД, КОТОРЫЙ РАБОТАЕТ:

df['local_date']=df['local_date'] + ':00'
df['local_date'] = pd.to_datetime(df.local_date.str.strip(), format='%d-%m-%Y %H:%M:%S')
df['local_date']=df['local_date'].dt.strftime('%Y-%m-%d %H:%M:%S')

Ответы [ 2 ]

4 голосов
/ 21 января 2020

Не могу сказать наверняка, но я считаю, что это связано с предупреждением, упомянутым в документации to_datetime:

dayfirst : boolean, default False Укажите порядок синтаксического анализа даты, если arg равен str или соответствует списку. Если True, то анализирует даты с первым днем, например, 10/11/12 - 2012-11-10. Предупреждение: dayfirst = True не является строгим, но предпочтет проанализировать сначала день (это известная ошибка, основанная на поведении dateutil) .

Я думаю, что путь к обойти это можно путем явного перевода строки формата в to_datetime:

df['local_date'] = pd.to_datetime(df.local_date, format='%d-%m-%Y %H:%M:%S')

Таким образом, он не будет случайно смешивать месяцы и дни (но вызовет ошибку, если какая-либо строка имеет другой формат)

0 голосов
/ 21 января 2020
import pandas as pd

local_date = "13-01-2011 00:00"

local_date = local_date + ":00"
local_date = pd.to_datetime(local_date, format='%d-%m-%Y %H:%M:%S')

local_date = local_date.strftime('%Y-%m-%d %H:%M:%S')

print(local_date)

Вывод:

 2011-01-13 00:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...