Несоответствие даты и времени для панд в csv при преобразовании в csv - PullRequest
0 голосов
/ 28 июня 2018

У меня есть фрейм данных, который выглядит так с отметкой времени в секундах UTC

               open     high      low    close    volumeto
time                                                      
1530169200  6112.81  6120.62  6108.65  6111.63  2212255.01
1530170100  6111.63  6119.12  6106.45  6113.59  1572299.36
1530171000  6113.59  6116.44  6104.34  6110.23  2792660.45
1530171900  6110.23  6123.71  6106.49  6123.71  2314140.04
1530172800  6121.33  6133.24  6121.18  6129.52  2037071.96

Когда я пытаюсь записать это в csv, это то, что я получаю, я предполагаю, что pandas предполагает, что предоставленное время является местным временем, и смещает его на 5 часов 30 минут, но я указал UTC время

1530149400,6112.81,6120.62,6108.65,6111.63,2212255.01:
1530150300,6111.63,6119.12,6106.45,6113.59,1572299.36:
1530151200,6113.59,6116.44,6104.34,6110.23,2792660.45:
1530152100,6110.23,6123.71,6106.49,6123.71,2314140.04:
1530153000,6121.33,6133.24,6121.18,6129.52,2037071.96:

Мой код выглядит как показано ниже

csv_string = io.StringIO()
df.to_csv(csv_string, line_terminator=':', header=False, date_format='%s')
print(csv_string.getvalue())

Как мне сообщить Pandas, что я указал время в формате UTC и не хочу компенсировать его при конвертации?

1 Ответ

0 голосов
/ 28 июня 2018

Один из способов сделать это состоит в том, чтобы сначала настроить временную зону столбца времени с помощью tz_localize(). В вашем случае предполагается, что ваш DataFrame называется df:

df.index = df.index.tz_localize(tz='UTC')

Теперь индекс учитывает часовой пояс. Тем не менее, я не уверен, что это причина того, что время отличается.

EDIT Если к индексу уже прикреплен tz, вы можете изменить его почти так же, как добавление часового пояса, но теперь с tz_convert, как указала ваша ошибка. Код станет:

df.index = df.index.tz_convert(tz='UTC')

Однако это также изменит время. Для замены часового пояса на часовой пояс UTC необходимо выполнить следующие действия:

import pytz
df.index = [t.replace(tzinfo=pytz.utc) for t in df.index]

Однако, прежде чем вы это сделаете, было бы хорошо сначала проверить, какой часовой пояс, и посмотреть, соответствует ли это разнице в 5:30 часов. Кроме того, также следует понимать, что использование date_format='%s' игнорирует информацию о часовом поясе и обычно предполагает часовой пояс системы. Для получения дополнительной информации см. Следующий принятый ответ:

Python - установка даты и времени в определенном часовом поясе (без преобразования UTC)

Кстати, если я просто скопирую и вставлю ваш DataFrame в свой компьютер и напишу его to_csv, он будет работать как положено.

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