J'ai lu Pandas change de fuseau horaire pour forex DataFrame mais je voudrais rendre la colonne de temps de mon fuseau horaire de données naïve pour l'interopérabilité avec une base de données sqlite3.
Les données de mon pandas dataframe sont déjà converties en données UTC, mais je ne veux pas avoir à conserver ces informations de fuseau horaire UTC dans la base de données.
Étant donné un échantillon des données dérivées d'autres sources, cela ressemble à ceci:
print(type(testdata))
print(testdata)
print(testdata.applymap(type))
donne:
<class 'pandas.core.frame.DataFrame'>
time navd88_ft station_id new
0 2018-03-07 01:31:02+00:00 -0.030332 13 5
1 2018-03-07 01:21:02+00:00 -0.121653 13 5
2 2018-03-07 01:26:02+00:00 -0.072945 13 5
3 2018-03-07 01:16:02+00:00 -0.139917 13 5
4 2018-03-07 01:11:02+00:00 -0.152085 13 5
time navd88_ft station_id \
0 <class 'pandas._libs.tslib.Timestamp'> <class 'float'> <class 'int'>
1 <class 'pandas._libs.tslib.Timestamp'> <class 'float'> <class 'int'>
2 <class 'pandas._libs.tslib.Timestamp'> <class 'float'> <class 'int'>
3 <class 'pandas._libs.tslib.Timestamp'> <class 'float'> <class 'int'>
4 <class 'pandas._libs.tslib.Timestamp'> <class 'float'> <class 'int'>
new
0 <class 'int'>
1 <class 'int'>
2 <class 'int'>
3 <class 'int'>
4 <class 'int'>
mais
newstamp = testdata['time'].tz_convert(None)
donne une erreur éventuelle:
TypeError: index is not a valid DatetimeIndex or PeriodIndex
Que dois-je faire pour remplacer la colonne par un horodatage naïf du fuseau horaire?
Vous pouvez utiliser tz_localize
pour changer le fuseau horaire, un horodatage naïf correspond au fuseau horaire None
:
testdata['time'].dt.tz_localize(None)
À moins que la colonne ne soit un index, vous devez appeler la méthode dt
pour accéder aux fonctions datetime de pandas.