Puede usar la función tz_localize
para hacer que una marca de tiempo o una zona horaria DateTimeIndex sea consciente, pero ¿cómo puede hacer lo contrario?
Un ejemplo:
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
Podría eliminar la zona horaria configurándola en Ninguno, pero luego el resultado se convierte a UTC (las 12 en punto se convirtieron en 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
¿Hay otra forma de convertir un DateTimeIndex en una zona horaria ingenua, pero conservando la zona horaria en la que se estableció?
Un poco de contexto sobre la razón por la que pregunto esto: quiero trabajar con series de tiempo ingenuas de zonas horarias (para evitar la molestia adicional con las zonas horarias, y no las necesito para el caso en el que estoy trabajando).
Pero por alguna razón, tengo que lidiar con una serie horaria consciente de la zona horaria en mi zona horaria local (Europa / Bruselas). Como todos mis otros datos son ingenuos de zona horaria (pero están representados en mi zona horaria local), quiero convertir esta serie temporal en ingenuo para seguir trabajando con ellos, pero también tiene que estar representado en mi zona horaria local (así que simplemente elimine la información de la zona horaria, sin convertir la hora visible para el usuario a UTC).
Sé que la hora está almacenada internamente como UTC y solo se convierte a otra zona horaria cuando la representa, por lo que tiene que haber algún tipo de conversión cuando quiero "deslocalizarla". Por ejemplo, con el módulo de fecha y hora de Python puede "eliminar" la zona horaria de esta manera:
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>
Entonces, basado en esto, podría hacer lo siguiente, pero supongo que esto no será muy eficiente cuando trabaje con una serie temporal más grande:
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