2013-06-19 14 views
6

Sto avendo un DataFrame con due colonne. Una colonna è riempita con data/ora, l'altra colonna contiene l'offset in ore a UTC del timestamp nella stessa riga.Come impostare l'offset dei timestamp in un dataframe panda?

Il dataframe assomiglia a questo:

In [44]: df 
Out[44]: 
        DATETIME OFFSET 

0 2013-01-01 00:00:00+00:00  1 
1 2013-01-01 01:00:00+00:00  1 
2 2013-01-01 02:00:00+00:00  1 
3 2013-01-01 03:00:00+00:00  1 
4 2013-01-01 04:00:00+00:00  1 
5 2013-01-01 05:00:00+00:00  1 
6 2013-01-01 06:00:00+00:00  2 
7 2013-01-01 07:00:00+00:00  2 
8 2013-01-01 08:00:00+00:00  2 

Quello che mi piace di raggiungere è quello di aggiungere l'offset per riga al timestamp:

In [44]: df 
Out[44]: 
        DATETIME OFFSET 

0 2013-01-01 00:00:00+01:00  1 
1 2013-01-01 01:00:00+01:00  1 
2 2013-01-01 02:00:00+01:00  1 
3 2013-01-01 03:00:00+01:00  1 
4 2013-01-01 04:00:00+01:00  1 
5 2013-01-01 05:00:00+01:00  1 
6 2013-01-01 06:00:00+02:00  2 
7 2013-01-01 07:00:00+02:00  2 
8 2013-01-01 08:00:00+02:00  2 

Ho provato con la sostituzione tzinfo ma non è riuscito per trovare una soluzione adeguata. Sto pensando a qualcosa di simile al seguente (pseudo codice):

df.apply(lambda x: x['DATETIME'].replace(tzinfo=pytz.utc + x['OFFSET']) 

Qualsiasi aiuto è apprezzato.

Grazie, Thomas

+1

Sembra che tu voglia fare 't1.tz_convert (9)' (ma questo non funziona!) –

risposta

6

Sembra pytz.FixedOffset si adatta a questo scopo.

In [39]: df.apply(lambda x: pd.Timestamp(x['DATETIME'], tz=pytz.FixedOffset(60*x['OFFSET'])), axis=1) 
Out[39]: 
0 2013-01-01 00:00:00+01:00 
1 2013-01-01 01:00:00+01:00 
2 2013-01-01 02:00:00+01:00 
3 2013-01-01 03:00:00+01:00 
4 2013-01-01 04:00:00+01:00 
5 2013-01-01 05:00:00+01:00 
6 2013-01-01 06:00:00+02:00 
7 2013-01-01 07:00:00+02:00 
8 2013-01-01 08:00:00+02:00 
dtype: object 

Gli altri qui usano più serie temporali di me, quindi potrebbe non essere la soluzione migliore.

+0

Grazie Dan, funziona come un fascino e basta per quello che sto facendo. – THM