Vous pouvez utiliser la fonction tz_localize
pour rendre un Timestamp ou un DateTimeIndex conscient du fuseau horaire, mais comment faire le contraire : comment convertir un Timestamp conscient du fuseau horaire en un Timestamp naïf, tout en préservant son fuseau horaire ?
Un exemple :
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
Je pourrais supprimer le fuseau horaire en lui attribuant la valeur None, mais le résultat est alors converti en UTC (12 heures deviennent 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
Existe-t-il un autre moyen de convertir un DateTimeIndex en fuseau horaire naïf, mais en conservant le fuseau horaire dans lequel il a été défini ?
Quelques contexte sur la raison pour laquelle je demande ça : Je veux travailler avec des séries temporelles sans fuseau horaire (pour éviter les tracas supplémentaires liés aux fuseaux horaires, et je n'en ai pas besoin pour le cas sur lequel je travaille).
Mais pour une raison quelconque, je dois traiter une série temporelle dans mon fuseau horaire local (Europe/Bruxelles). Comme toutes mes autres données ne tiennent pas compte du fuseau horaire (mais sont représentées dans mon fuseau horaire local), je veux convertir cette série temporelle en série naïve pour pouvoir continuer à travailler avec elle, mais elle doit également être représentée dans mon fuseau horaire local (il suffit donc de supprimer les informations relatives au fuseau horaire, sans convertir la série temporelle en série naïve). visible par l'utilisateur l'heure en UTC).
Je sais que l'heure est en fait stockée en interne en UTC et qu'elle n'est convertie en un autre fuseau horaire que lorsque vous la représentez, il doit donc y avoir une sorte de conversion lorsque je veux la "délocaliser". Par exemple, avec le module python datetime, vous pouvez "supprimer" le fuseau horaire de la manière suivante :
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>
Sur cette base, je pourrais faire ce qui suit, mais je suppose que cela ne sera pas très efficace si je travaille avec une série chronologique plus importante :
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