2016-07-07 6 views
2

Ich habe einen Pandas-Datenrahmen mit einer Datums- und einer Zeitspalte, unter anderem, und ich versuche, beide Spalten in einen Unix-Zeitstempel mit Mikrosekundengenauigkeit zu konvertieren, das ist so ich kann Dump den Datenrahmen in eine numpy Speicherabbilddatei (die Floats oder zumindest keine Datumsobjekte erfordert, so ist es wichtig).Timestamp-Konvertierung fehlendes gewünschtes Ergebnis

So ohne die Daten-Rahmen, nur die Zeichenfolge verwenden, erhalte ich die folgende:

DT = '2014-10-01 00:00:07.082000' 

UX= time.mktime(datetime.datetime.strptime(DT, '%Y-%m-%d %H:%M:%S.%f').timetuple()) 
print UX 
>>> 1412118007.0 

tm = datetime.datetime.fromtimestamp(UX) 
print tm 
>>>2014-10-01 00:00:07 

So wie ich die Mikrosekunden mit dem Zeitstempel enthalten?

Antwort

2

Sie mit ns Präzision np.int64 für die Unix-Zeit werfen können:

df = pd.DataFrame({'A':['2014-10-01 00:00:07.082000', '2014-10-01 00:00:07.082000']}) 
print (df) 
          A 
0 2014-10-01 00:00:07.082000 
1 2014-10-01 00:00:07.082000 

df['A'] = pd.to_datetime(df.A) 

df['B'] = df.A.astype(np.int64) 
df['C'] = pd.to_datetime(df.B, unit='ns') 
print (df) 
         A     B      C 
0 2014-10-01 00:00:07.082 1412121607082000000 2014-10-01 00:00:07.082 
1 2014-10-01 00:00:07.082 1412121607082000000 2014-10-01 00:00:07.082 

Für ms Präzision Einsatz:

df['B'] = (df.A.astype(np.int64) // 10**6) 
df['C'] = pd.to_datetime(df.B, unit='ms') 
print (df) 
         A    B      C 
0 2014-10-01 00:00:07.082 1412121607082 2014-10-01 00:00:07.082 
1 2014-10-01 00:00:07.082 1412121607082 2014-10-01 00:00:07.082 
+0

Ausgezeichnet, das löst es. – ajsp

-1

Dies tun =)

from datetime import datetime 


DT = '2014-10-01 00:00:07.082000' 

UX = datetime.strptime(DT, '%Y-%m-%d %H:%M:%S.%f') 

print UX 
>>> 2014-10-01 00:00:07.082000 
+0

Das ist nicht a Zeitstempel jedoch, das ist ein Datum-Zeit-Objekt, das nicht gespeichert und von a gelesen werden kann .npy Datei. – ajsp