Вы можете использовать функцию tz_localize
, чтобы узнать временную зону Timestamp или 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 и только преобразуется в другой часовой пояс, когда вы его представляете, поэтому должно быть какое-то преобразование, когда я хочу "делокализовать" его. Например, с модулем datetime python вы можете "удалить" часовой пояс следующим образом:
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