2013-02-17 11 views
33

Jak uzyskać różnicę czasu w sekundach od zmiennej numpy.timedelta64?Różnica czasu w sekundach od numpy.timedelta64

time1 = '2012-10-05 04:45:18' 
time2 = '2012-10-05 04:44:13' 
dt = np.datetime64(time1) - np.datetime64(time2) 
print dt 

0:01:05 

Chciałbym przekonwertować dt na numer (int lub float) reprezentujący różnicę czasu w sekundach.

Odpowiedz

24

można uzyskać do niego dostęp za pośrednictwem "owinięty" elementu datetime:

>>> dt.item().total_seconds() 
65.0 

Objaśnienie: tutaj dt jest array scalar w numpy, który jest tablicą lub zerowy stopień tablica 0-wymiarowej. Więc znajdziesz dt tutaj również ma wszystkie metody, które posiada ndarray, i możesz zrobić na przykład dt.astype('float'). Ale zawija obiekt Pythona, w tym przypadku obiekt datetime.timedelta.

Aby uzyskać oryginalny skalar, można użyć dt.item(). Do indeksu skalar tablicy można użyć nieco dziwacznej składni GetItem użyciu pustego krotki:

>>> dt[()] 
array(datetime.timedelta(0, 65), dtype='timedelta64[s]') 

to powinno działać we wszystkich wersjach numpy, ale jeśli używasz numpy v1.7 + może być lepiej użyj nowszego numpy datetime API bezpośrednio, jak wyjaśniono w odpowiedzi z J.F. Sebastien tutaj.

+0

Dzięki, że pracował. Czy możesz wyjaśnić, dlaczego dt.seconds nie działa? – sashkello

+4

To 'datetime.timedelta' ma atrybut o takiej nazwie, a nie' numpy.timedelta64'. Nie wiem, dlaczego numpy to zaimplementował, może ktoś inny może odpowiedzieć .. – wim

54

Aby uzyskać liczbę sekund od numpy.timedelta64() obiektu przy użyciu numpy 1.7 experimental datetime API:

seconds = dt/np.timedelta64(1, 's') 
+0

Może używamy różnych wersji? Mam 'TypeError: funkcja przyjmuje co najwyżej 1 argument (2 dany)' przy próbie 'np.timedelta64 (1, '' ')' – wim

+4

@wim: yes. [1.6 i 1.7 różnią się API] (http://docs.scipy.org/doc/numpy-dev/reference/arrays.datetime.html#datetime-and-timedelta-arithmetic). – jfs

+6

Ta odpowiedź działa również na tablicach. – Yariv

Powiązane problemy