2017-12-19 18 views
0

파이썬 3.6.2를 사용하고 있습니다.`fromiter()`를 사용하여 파이썬`datetime` 객체의 반복 가능한 객체를 Numpy`datetime64` 객체의 배열로 변환 할 수 없습니다. 곤충?

this question에서 표준 datetime 유형을 np.datetime64 유형으로 변환하는 방법을 다음과 같이 배웠습니다.

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

출력 : 내가 NumPy와 배열에 표준 datetime 객체의 반복자를 변환 할 수 없습니다

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

하지만. 다음 코드는 ...

...는 다음 오류를 나타냅니다.

--------------------------------------------------------------------------- 
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' 

그러나 np.asarray()을 사용합니다.

np.asarray([dt]) 

출력 :

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

이이 np.fromiter() 또는 np.datetime64 중 버그가 될 수 있는가?

답변

1

그것은 단지 날짜 단위를 설정하는 문제 일 수 있습니다

np.array의 기본 동작은 (정말 목록 fromiter이 필요하지 않습니다) 객체 DTYPE 배열 만드는 것입니다
In [368]: dt = datetime.now() 
In [369]: dt 
Out[369]: datetime.datetime(2017, 12, 19, 12, 48, 45, 143287) 

:

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) 

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

은 생산 일반 'datetime64'처럼 일 같은데

및 지정 단위 :

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

이 또한 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]') 

나는 나 오히려 np.datetime64 가장 일반적인 것보다, 단위를 지정할 수 있습니다 datetime64의 문자열 이름을 사용하도록 배웠다.

+0

감사합니다. 문제는 해상도 (단위)를 지정하지 않았다는 것입니다. 문자열 양식을 사용하면 효과가 있습니다. – Ray