2016-03-21 5 views
1

Я использую pandas для преобразования строк в метки времени. У меня есть строка следующим образом: '2016-03-12 18:09:19 PST'.Pandas to_datetime производит невозможное время

Если я сделать следующее:

pd.to_datetime('2016-03-12 18:09:19 PST') 

я получаю:

Timestamp('2016-03-13 02:09:19') 

Я не знаю, почему это происходит. Контраст с поведением:

pd.to_datetime('2016-03-12 18:09:19') 

Который возвращает:

Timestamp('2016-03-12 18:09:19') 

Обратите внимание, что время Timestamp('2016-03-13 02:09:19') фактически не существует в США/тихоокеанскому времени. Если вы попытаетесь сделать pd.to_datetime('2016-03-12 18:09:19 PST').tz_localize('US/Pacific'), вы получите NonExistentTimeError.

Почему введение «PST» в конце строки вызывает вычитание 16 часов? Как получается, что to_datetime может ввести невозможные даты?

+0

Это не вычитание 16 часов, его добавление 8 (обратите внимание на изменение даты). Это сделало бы это время UTC. – Alexander

ответ

0

Pandas преобразует вашу строку в UTC. Проблема отсутствует, когда «PST» опущен, поскольку pandas предполагает по умолчанию, что указанная вами временная метка уже находится в UTC, поэтому она не выполняет преобразование.

Вы можете остановить преобразование в UTC с помощью аргумента ключевого слова utc=False.

pd.to_datetime('2016-03-12 18:09:19 PST', utc=False) 
+0

Я попробовал это 'pd.to_datetime ('2016-03-12 18:09:19 PST', utc = False)' возвращает 'Timestamp ('2016-03-13 02:09:19')' – Logister

+0

Какая версия панды вы используете? Он возвращает 'Timestamp ('2016-03-12 18:09:19')' для меня на pandas 0.17.0. – root

+0

'pd .__ version__' возвращает 0.17.1, поэтому я предполагаю, что это может быть проблема с версией. Я обновлю и посмотрю, исчезнет ли она. – Logister

Смежные вопросы