Konvertieren von float32-Array nach datetime64 in Numpy 1.6.1

8

Was ist der richtige Weg um ganzzahlige Daten in datetime64 in numpy zu konvertieren? Ich habe es versucht:

%Vor%

, aber eine falsche Konvertierung erhalten. Wie wäre es, sie korrekt als numpy.datetime64-Objekte mit numpy.loadtxt (sie kommen aus einer CSV-Datei) zu lesen?

    
Benjamin 08.03.2012, 20:56
quelle

2 Antworten

5

Seltsamerweise funktioniert das: numpy.datetime64(a.astype("S8").tolist()) , während dies nicht gilt: numpy.datetime64(a.astype("S8")) . Die erste Methode ist immer noch etwas weniger verschachtelt als: numpy.array([numpy.datetime64(str(i)) for i in a]) . Ich fragte warum in diese Frage .

    
Benjamin 14.03.2012, 20:28
quelle
5

Ihr Problem ist, dass datetime64 eine Zeichenkette im Format yyyy-mm-dd erwartet, während die Typkonvertierung Zeichenketten im Format yyyymmdd erzeugt. Ich würde so etwas vorschlagen:

%Vor%

Aber es funktioniert nicht für mich (ich habe numpy 1.6.1), es schlägt mit der Nachricht "NotImplementedError: Nicht für diesen Typ implementiert". Wenn dies nicht in 1.7 implementiert ist, kann ich nur eine reine Python-Lösung vorschlagen:

%Vor%

... oder Ihre Eingabe vorverarbeiten, um die Daten im erwarteten Format zu übermitteln.

Bearbeiten: Ich kann auch eine alternative Lösung anbieten, die vectorize verwendet, aber ich weiß nicht genau, wie es funktioniert, also weiß ich nicht, was schief läuft:

> %Vor%

Aus irgendeinem Grund ignoriert es otypes und gibt |S4 statt |S10 aus. Entschuldigung, ich kann nicht mehr helfen, aber dies sollte einen Ausgangspunkt für die Suche nach anderen Lösungen bieten.

Update: Dank OP-Feedback habe ich mir eine neue Möglichkeit einfallen lassen. Dies sollte wie erwartet funktionieren:

%Vor%

Seltsam, in diesem Fall funktioniert datetime64 gut mit oder ohne Bindestriche ...

    
mgibsonbr 08.03.2012 22:04
quelle

Tags und Links