2016-04-08 14 views
5

Sto usando Pandas di leggere un Sas set di dati utilizzando read_sasconvertire un datetime SAS in Pandas

C'è una variabile datetime nel set di dati SAS, che appare in Panda come:

1.775376e+09

Una volta mi converto al str la data è:

1775376002.0

La data corrispondente SAS (non nel mio Pandas set di dati) sembra essere un DATETIME21.2

04APR2016:08:00:02.00

ho provato a convertirlo utilizzando

pd.to_datetime(df.mysasdate,format='%d%m%Y%H%M%S') senza successo

TypeError: 'float' object is unsliceable 

Qualche idea? Grazie!

+1

Partenza a questa domanda. Il modulo datetime ha il convertitore che ti serve, penso: http://stackoverflow.com/a/26923644/4633893 –

risposta

9

SAS date value

is a value that represents the number of days between January 1, 1960, and a specified date. link

Quindi è possibile convertire il numero to_timedelta e aggiungere date1960-01-01 00:00:00

df = pd.DataFrame({'mysasdate':[1775376002.0, 1775377002.0]}) 
print (df) 
     mysasdate 
0 1.775376e+09 
1 1.775377e+09 

print (pd.to_timedelta(df['mysasdate'], unit='s') + pd.datetime(1960, 1, 1)) 
0 2016-04-04 08:00:02 
1 2016-04-04 08:16:42 
Name: mysasdate, dtype: datetime64[ns] 
+0

eccellente! funzionerà Grazie jezrael –

+0

effettivamente ottengo 'ValueError: i dati temporali '1775376002.0' non corrispondono al formato '% d% b% Y:% H:% M:% S.% f' (corrispondenza)' –

+0

Penso che tu abbia usato il formato di come appare la data in SAS –

Problemi correlati