web-dev-qa-db-fra.com

Comment supprimer le fuseau horaire d'une colonne d'horodatage dans un pandas dataframe

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?

10
Dave X

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.

16
MaFF