2014-12-14 10 views
5

Ich versuche, ein numpy Array zu erstellen, das anschließend von einigen Datetime-Werten aufgefüllt wird. Ich kann es nicht funktionieren lassen, kannst du bitte helfen?Kann numpy datetime64 arrays nicht füllen

import numpy as np 
t = np.empty(3,dtype='datetime64') 
t 

Ich bekomme eine TypeError: Invalid datetime unit "generic" in metadata. Gleiche, wenn ich versuche:

import numpy as np 
t = np.empty(3,dtype='datetime64') 
t[0] = np.datetime64('2014-12-12 20:20:20') 

ich:

TypeError : Cannot cast numpy timedelta64 scalar from metadata [m] to according to the rule 'same_kind'.

Vielen Dank im Voraus für Sie Hilfe!

Antwort

5

Es sollte funktionieren, wenn Sie beim Erstellen des Arrays auch einen Zeiteinheitenparameter angeben. Zum Beispiel:

>>> t = np.empty(3, dtype='datetime64[s]') 
>>> t 
array(['1970-01-01T00:00:00+0000', '1970-01-01T00:00:00+0000', 
     '1970-01-01T00:00:00+0000'], dtype='datetime64[s]') 

Und dann können Sie auch die Werte je nach Bedarf zuweisen:

>>> t[0] = np.datetime64('2014-12-12 20:20:20') 
>>> t 
array(['2014-12-12T20:20:20+0000', '1970-01-01T00:00:00+0000', 
     '1970-01-01T00:00:00+0000'], dtype='datetime64[s]') 

NumPy ermöglicht nicht Datetimes mit generischen Einheiten (d keine Einheiten) dargestellt werden. Erstellen des Array t ohne die Einheit Parameter und dann das erste Element zuzugreifen versuchen t[0] wird diesen Fehler auslösen:

ValueError: Cannot convert a NumPy datetime value other than NaT with generic units 

Hier ist NumPy nicht in der Lage zu folgern, welche Einheiten die Darstellung des Datetime haben sollte. Das Raten kann aufgrund der unterschiedlichen Kalendermonate und Jahre zu fehlerhaften Werten führen.

Dieser Punkt ist in der Dokumentation nicht sehr explizit, kann aber aus der datetime page entnommen werden und wird im Quellcode here notiert.

+1

Ja, es war gestern eindeutig zu spät für mich, weil ich das auf der Datetime-Seite nicht gesehen habe ... Spot on, Thanks a lot. – caliloo

+0

Kein Problem - froh, dass es hilfreich war –

+0

Danke für die Hilfe! Ich war auch blind gegenüber den Ärzten ...^_ ~ – Sardathrion