Ich möchte ein Datetime-Array an eine Numba-Funktion übergeben (die nicht vektorisiert werden kann und ansonsten sehr langsam wäre). Ich verstehe, dass Numba numpy.datetime64 unterstützt. Es scheint jedoch, dass es datetime64 [D] (Tagesgenauigkeit) aber nicht datetime64 [ns] (Millisekunden-Genauigkeit) unterstützt (ich habe das auf die harte Tour gelernt: ist das dokumentiert?).
Ich habe versucht, von datetime64 [ns] zu datetime64 [D] zu konvertieren, aber ich finde keinen Weg! Irgendwelche Ideen?
Ich habe mein Problem mit dem folgenden minimalen Code zusammengefasst. Wenn Sie testdf(mydates)
ausführen, was datetime64 [D] ist, funktioniert es einwandfrei. Wenn Sie testdf(dates_input)
ausführen, was datetime64 [ns] ist, ist dies nicht der Fall. Beachten Sie, dass in diesem Beispiel die Daten einfach an die Numba-Funktion übergeben werden, die (noch) nichts mit ihnen macht. Ich versuche, dates_input in datetime64 [D] zu konvertieren, aber die Konvertierung funktioniert nicht. In meinem ursprünglichen Code lese ich aus einer SQL-Tabelle in einen Pandas-Datenrahmen und brauche eine Spalte, die den Tag jedes Datums auf den 15. ändert.
Der Fehler, den ich erhalte, wenn ich testdf(dates_input)
verwende, ist:
Series.astype
konvertiert alle datumsähnlichen Objekte in datetime64[ns]
.
Um in datetime64[D]
zu konvertieren, verwenden Sie values
, um vor dem Aufruf von astype
:
Beachten Sie, dass ND-Frames (wie Series und DataFrames) nur datumszeitähnliche Objekte als Objekte von dtype datetime64[ns]
enthalten können. Die automatische Konvertierung aller datetime-likes in einen gemeinsamen dtyp vereinfacht die nachfolgenden Datumsberechnungen. Aber es macht es unmöglich, datetime64[s]
-Objekte in einer DataFrame-Spalte zu speichern. Pandas Core-Entwickler, Jeff Reback erklärt ,
"Wir erlauben keine direkten Konvertierungen, weil es einfach zu kompliziert ist, etwas anderes als datetime64 [ns] intern (oder überhaupt nicht) zu speichern."
Beachten Sie auch, dass df['month_15'].astype('datetime64[D]')
dtype datetime64[ns]
:
Wenn Sie die Elemente in der Serie durchlaufen, erhalten Sie Pandas Timestamps
, nicht datetime64[ns]
s.
Daher ist es nicht klar, dass Numba tatsächlich ein Problem mit datetime64[ns]
hat, es könnte nur ein Problem mit Timestamps
sein. Tut mir leid, ich kann das nicht überprüfen - ich habe Numba nicht installiert.
Es könnte jedoch nützlich sein, dass Sie
ausprobieren %Vor% seit df['month_15'].astype('datetime64[D]').values
ist wirklich ein NumPy Array von dtype datetime64[ns]
:
Wenn das funktioniert, müssen Sie nicht alles in datetime64[D]
konvertieren, sondern nur NumPy-Arrays - nicht Pandas Series - an testf
übergeben.