Puoi utilizzare la funzione tz_localizeper rendere consapevole un fuso orario Timestamp o DateTimeIndex, ma come puoi fare il contrario: come puoi convertire un Timestamp sensibile al fuso orario in uno ingenuo, preservandone il fuso orario?
Un esempio:
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
Potrei rimuovere il fuso orario impostandolo su Nessuno, ma poi il risultato viene convertito in UTC (le 12 sono diventate 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
C'è un altro modo per convertire un DateTimeIndex in un fuso orario ingenuo, ma preservando il fuso orario in cui è stato impostato?
Un po 'di contesto sul motivo per cui lo chiedo: voglio lavorare con serie temporali ingenue nel fuso orario (per evitare il fastidio extra con i fusi orari, e non ne ho bisogno per il caso su cui sto lavorando).
Ma per qualche motivo, devo gestire una serie temporale che tiene conto del fuso orario nel mio fuso orario locale (Europa / Bruxelles). Poiché tutti gli altri miei dati sono ingenui del fuso orario (ma rappresentati nel mio fuso orario locale), voglio convertire questa serie temporale in ingenuo per lavorarci ulteriormente, ma deve anche essere rappresentato nel mio fuso orario locale (quindi rimuovi le informazioni sul fuso orario, senza convertire l' ora visibile all'utente in UTC).
So che l'ora è effettivamente memorizzata internamente come UTC e convertita in un altro fuso orario solo quando la rappresenti, quindi deve esserci un qualche tipo di conversione quando voglio "delocalizzarla". Ad esempio, con il modulo datetime di python puoi "rimuovere" il fuso orario in questo modo:
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>
Quindi, in base a questo, potrei fare quanto segue, ma suppongo che non sarà molto efficiente quando si lavora con una serie temporale più 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