2014-11-14 7 views
5

Questa è probabilmente una soluzione semplice, ma come farei per convertire un numero datetime SAS (numero di secondi dall'1/1/1960). Un esempio di uno dei valori all'interno dei panda colonna è 1716470000.Converti SAS numerico in python datetime

ho provato:

df['PyDatetime'] = pd.to_datetime(df,infer_datetime_format=True) 

e ottengo numeri come '1970-01-01 00: 00: 01,725480'

+2

consigli non richiesti: aiuta davvero answerers se si fornisce l'output desiderato . In altre parole, sappiamo che le date intorno al 1970 sono probabilmente sbagliate, ma non sappiamo ancora cosa ti aspetti di ottenere. –

risposta

6

è necessario il modulo incorporato datetime:

import datetime 
sastime = 1716470000 
epoch = datetime.datetime(1960, 1, 1) 
print(epoch + datetime.timedelta(seconds=sastime)) 

Che mostra:

datetime.datetime(2014, 5, 23, 13, 13, 20) # is this right? 

Quindi, se si dispone di un dataframe con una colonna chiamata sastime, si potrebbe fare:

epoch = datetime.datetime(1960, 1, 1) 
# cast -s- to python int in case it's a string or a numpy.int 
df['datetime'] = df['sastime'].apply(
    lambda s: epoch + datetime.timedelta(seconds=int(s)) 
) 
+0

PERFETTO !! Grazie mille, sarà davvero utile. – Chris

+1

@Chris nota: a seconda del tipo di dati sorgente, potrebbe essere necessario forzare 's' su un semplice 'int'. Revisionerò la risposta di conseguenza. –