Вы можете использовать эту функцию, tz_localize
чтобы сделать отметку времени или DateTimeIndex осведомленной о часовом поясе, но как вы можете сделать обратное: как вы можете преобразовать временную метку, учитывающую часовой пояс, в наивную, сохраняя при этом часовой пояс?
Пример:
In [82]: t = pd.date_range(start="2013-05-18 12:00:00", periods=10, freq='s', tz="Europe/Brussels")
In [83]: t
Out[83]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: S, Timezone: Europe/Brussels
Я мог бы удалить часовой пояс, установив для него значение None, но затем результат преобразуется в UTC (12 часов стало 10):
In [86]: t.tz = None
In [87]: t
Out[87]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 10:00:00, ..., 2013-05-18 10:00:09]
Length: 10, Freq: S, Timezone: None
Есть ли другой способ преобразовать DateTimeIndex в наивный часовой пояс, но при сохранении часового пояса, в котором он был установлен?
Некоторый контекст по причине, по которой я спрашиваю об этом: я хочу работать с наивными временными рядами часовых поясов (чтобы избежать лишних хлопот с часовыми поясами, и мне они не нужны в случае, над которым я работаю).
Но по какой-то причине мне приходится иметь дело с временными рядами с учетом часового пояса в моем местном часовом поясе (Европа / Брюссель). Поскольку все мои другие данные являются наивными часовыми поясами (но представлены в моем местном часовом поясе), я хочу преобразовать эти временные ряды в наивные для дальнейшей работы с ними, но они также должны быть представлены в моем местном часовом поясе (поэтому просто удалите информацию о часовом поясе, без преобразования времени, видимого пользователем, в UTC).
Я знаю, что время на самом деле хранится внутри как UTC и преобразуется в другой часовой пояс только тогда, когда вы его представляете, поэтому должно быть какое-то преобразование, когда я хочу его «сделать». Например, с модулем python datetime вы можете «удалить» часовой пояс следующим образом:
In [119]: d = pd.Timestamp("2013-05-18 12:00:00", tz="Europe/Brussels")
In [120]: d
Out[120]: <Timestamp: 2013-05-18 12:00:00+0200 CEST, tz=Europe/Brussels>
In [121]: d.replace(tzinfo=None)
Out[121]: <Timestamp: 2013-05-18 12:00:00>
Итак, исходя из этого, я мог бы сделать следующее, но полагаю, это будет не очень эффективно при работе с более крупными таймсериями:
In [124]: t
Out[124]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: S, Timezone: Europe/Brussels
In [125]: pd.DatetimeIndex([i.replace(tzinfo=None) for i in t])
Out[125]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: None, Timezone: None