2017-12-19 8 views
0

Ich benutze Python 3.6.2.Konvertieren von einem iterablen von python `datetime` Objekten in ein Array von Numpy` datetime64` Objekten mit `fromiter()` nicht möglich. Fehler?

Ich habe gelernt von this question, wie zwischen dem Standard datetime Typ zu np.datetime64 Typ wie folgt konvertieren.

dt = datetime.now() 
print(dt) 
print(np.datetime64(dt)) 

Ausgang:

2017-12-19 17:20:12.743969 
2017-12-19T17:20:12.743969 

Aber ich kann nicht einen iterable von Standard datetime Objekte in eine Numpy Array konvertieren. Der folgende Code ...

... gibt den folgenden Fehler.

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-14-46e4618bda89> in <module>() 
----> 1 np.fromiter([dt], dtype=np.datetime64) 

TypeError: Cannot cast datetime.datetime object from metadata [us] to according to the rule 'same_kind' 

jedoch mit np.asarray() funktioniert.

np.asarray([dt]) 

Ausgang:

array([datetime.datetime(2017, 12, 19, 17, 20, 12, 743969)], dtype=object) 

Könnte dies ein Fehler sein, entweder mit np.fromiter() oder np.datetime64?

Antwort

1

Es kann nur darum gehen, die Datetime-Einheiten einstellen:

In [368]: dt = datetime.now() 
In [369]: dt 
Out[369]: datetime.datetime(2017, 12, 19, 12, 48, 45, 143287) 

Standardaktion für np.array (nicht wirklich fromiter mit einer Liste müssen) ist ein Objekt dtype Array zu erstellen:

In [370]: np.array([dt,dt]) 
Out[370]: 
array([datetime.datetime(2017, 12, 19, 12, 48, 45, 143287), 
     datetime.datetime(2017, 12, 19, 12, 48, 45, 143287)], dtype=object) 

Sieht aus wie schlicht 'datetime64' produziert Tage:

In [371]: np.array([dt,dt], dtype='datetime64') 
Out[371]: array(['2017-12-19', '2017-12-19'], dtype='datetime64[D]') 

und unter Angabe der Einheiten:

In [373]: np.array([dt,dt], dtype='datetime64[m]') 
Out[373]: array(['2017-12-19T12:48', '2017-12-19T12:48'], dtype='datetime64[m]') 

Dies funktioniert auch mit fromiter.

In [374]: np.fromiter([dt,dt], dtype='datetime64[m]') 
Out[374]: array(['2017-12-19T12:48', '2017-12-19T12:48'], dtype='datetime64[m]') 
In [384]: x= np.fromiter([dt,dt], dtype='M8[us]') 
In [385]: x 
Out[385]: array(['2017-12-19T12:48:45.143287', '2017-12-19T12:48:45.143287'], dtype='datetime64[us]') 

Ich habe gelernt, die Zeichenfolge Name des datetime64 zu verwenden, die mir die Einheiten angeben können, anstatt die allgemeinste np.datetime64.

+0

Danke. Ich denke, das Problem war, dass ich die Auflösung (Einheit) nicht angegeben habe. Die Verwendung der Zeichenfolgenform funktioniert. – Ray

Verwandte Themen