[PYTHON] 파이썬 numpy : datetime64 [ns]를 datetime64 [D] (Numba와 함께 사용)로 변환 할 수 없습니다.
PYTHON파이썬 numpy : datetime64 [ns]를 datetime64 [D] (Numba와 함께 사용)로 변환 할 수 없습니다.
Numetime 함수에 datetime 배열을 전달하려고합니다 (벡터화 할 수없고 매우 느릴 수 있습니다). Numba는 numpy.datetime64를 지원합니다. 그러나 datetime64 [D] (day precision)는 지원하지만 datetime64 [ns] (millisecond precision)는 지원하지 않는 것 같습니다.
나는 datetime64 [ns]에서 datetime64 [D]로 변환하려고했지만, 길을 찾지 못했습니다! 어떤 아이디어?
나는 아래의 최소한의 코드로 내 문제를 요약했다. datetime64 [D] 인 testdf (mydates)를 실행하면 정상적으로 작동합니다. datetime64 [ns] 인 testdf (dates_input)를 실행하면 그렇지 않습니다. 이 예제는 날짜를 Numba 함수에 전달하기 만합니다. Numba 함수는 아무 것도하지 않습니다. dates_input을 datetime64 [D]로 변환하려고 시도하지만 변환이 작동하지 않습니다. 원래 코드에서 SQL 테이블을 판다 데이터 프레임으로 읽고 각 날짜의 날짜를 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)
testdf (dates_input)를 실행하면 오류가 발생합니다.
numba.typeinfer.TypingError: Failed at nopython (nopython frontend)
Var 'dates' unified to object: dates := {pyobject}
해결법
-
==============================
1.Series.astype은 모든 날짜와 유사한 객체를 datetime64 [ns]로 변환합니다. datetime64 [D]로 변환하려면 값을 사용하여 astype을 호출하기 전에 NumPy 배열을 얻습니다.
Series.astype은 모든 날짜와 유사한 객체를 datetime64 [ns]로 변환합니다. datetime64 [D]로 변환하려면 값을 사용하여 astype을 호출하기 전에 NumPy 배열을 얻습니다.
dates_input = df["month_15"].values.astype('datetime64[D]')
NDFrames (Series 및 DataFrames와 같은)는 datetime-like 객체를 dtype datetime64 [ns]의 객체로만 저장할 수 있습니다. 모든 datetime-likes를 공통 dtype으로 자동 변환하면 후속 날짜 계산이 간단 해집니다. 그러나 DataFrame 열에 datetime64 [s] 객체를 저장하는 것은 불가능합니다. 팬더 코어 개발자 Jeff Reback은 다음과 같이 설명합니다.
또한 df [ 'month_15'] .astype ( 'datetime64 [D]')에는 dtype datetime64 [ns]가 있습니다.
In [29]: df['month_15'].astype('datetime64[D]').dtype Out[29]: dtype('<M8[ns]')
시리즈의 항목을 반복 할 때 datetime64 [ns]가 아닌 pandas Timestamp가 생성됩니다.
In [28]: df['month_15'].astype('datetime64[D]').tolist() Out[28]: [Timestamp('2010-01-15 00:00:00'), Timestamp('2011-01-15 00:00:00')]
그러므로 Numba가 실제로 datetime64 [ns]에 문제가 있음이 분명하지 않습니다. Timestamps에 문제가있을 수 있습니다. 죄송합니다. 확인할 수 없습니다. Numba가 설치되어 있지 않습니다.
그러나 시도하는 것이 유용 할 수 있습니다.
testf(df['month_15'].astype('datetime64[D]').values)
df [ 'month_15'] .stat ( 'datetime64 [D]'). 값은 실제로 dtype datetime64 [ns]의 NumPy 배열입니다.
In [31]: df['month_15'].astype('datetime64[D]').values.dtype Out[31]: dtype('<M8[ns]')
그것이 작동하면, 모든 것을 datetime64 [D]로 변환 할 필요가 없으며, 판다 시리즈가 아닌 NumPy 배열을 testf로 전달하면됩니다.
from https://stackoverflow.com/questions/31917964/python-numpy-cannot-convert-datetime64ns-to-datetime64d-to-use-with-numba by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 XML을 JSON으로 변환하는 방법은 무엇입니까? [복제] (0) | 2018.11.16 |
---|---|
[PYTHON] 무기한 체에 휠 분해능 추가하기 (0) | 2018.11.16 |
[PYTHON] Windows 용 Python C 확장 모듈 빌드하기 (0) | 2018.11.16 |
[PYTHON] 다른 변수를 기반으로 주문을 보존하여 collect_list (0) | 2018.11.16 |
[PYTHON] 파이썬 : 폴더에서 몇 개의 json 파일 읽기 (0) | 2018.11.16 |