Python-numpy: cannot convert datetime64[ns], um datetime64[D] (zur Verwendung mit Numba)

Möchte ich weitergeben, einen datetime-array an eine Numba-Funktion (die nicht vektorisiert und sonst sehr langsam). Ich verstehe Numba unterstützt numpy.datetime64. Es scheint jedoch, es unterstützt datetime64[D] (Tag genau), aber nicht datetime64[ns] (Millisekunden genau) (ich lernte das auf die harte Tour: wird es dokumentiert?).

Habe ich versucht zu konvertieren von datetime64[ns], um datetime64[D], kann aber nicht scheinen, um einen Weg zu finden! Irgendwelche Ideen?

Habe ich zusammengefasst mein problem mit den minimal-code unten. Wenn Sie testdf(mydates), die datetime64[D], funktioniert es einwandfrei. Wenn Sie testdf(dates_input), die datetime64[ns], ist es nicht. Beachten Sie, dass dieses Beispiel einfach übergibt die Daten an die Numba-Funktion, die nicht (noch) nichts mit Ihnen. Ich versuche, Sie zu konvertieren dates_input zu datetime64[D], aber die Konvertierung funktioniert nicht. In meinem ursprünglichen code, ich lese aus einer SQL-Tabelle in ein pandas dataframe, und brauchen eine Spalte, die Veränderungen der Tag des jeweiligen Datum um den 15.

import numba
import numpy as np
import pandas as pd
import datetime

mydates =np.array(['2010-01-01','2011-01-02']).astype('datetime64[D]')
df=pd.DataFrame()
df["rawdate"]=mydates
df["month_15"] = df["rawdate"].apply(lambda r: datetime.date( r.year, r.month,15 ) )

dates_input = df["month_15"].astype('datetime64[D]')
print dates_input.dtype # Why datetime64[ns] and not datetime64[D] ??


@numba.jit(nopython=True)
def testf(dates):
    return 1

print testf(mydates)

Den Fehler bekomme ich, wenn ich testdf(dates_input) ist:

numba.typeinfer.TypingError: Failed at nopython (nopython frontend)
Var 'dates' unified to object: dates := {pyobject}
  • Dies ist eine wirklich nützliche Frage, aber es war aus irgendeinem Grund sehr schwer zu finden, nur über die Suche. Erhielt ich eine ähnliche Fehlermeldung, wenn Sie versuchen zu verwenden np.busday_count auf pandas Daten, die gelesen: TypeError: Iterator operand 0 dtype could not be cast from dtype('<M8[ns]') to dtype('<M8[D]') according to the rule 'safe'
Schreibe einen Kommentar