2013-03-29 3 views
1

나는 numpy에 비교적 익숙하다. .csv 파일의 데이터를 YYYY, MM, DD 및 기타 자료의 날짜와 함께 가져 왔습니다. 나는 "적절한"날짜 시간 형식으로 날짜와 함께 모든 것을 하나의 배열에 넣고 싶습니다. 이건 내 코드입니다 :python numpy 구조화 된 배열 문제

na_trades = np.zeros((number_of_orders,), dtype = ('datetime64,a5,a5,i4')) 
for row in range(number_of_orders): 
    order = na_trades_csv[row] 
    order_date = dt.datetime(order[0],order[1],order[2]) 
    order_date64 = np.datetime64(order_date) 
    na_trades[row] = (order_date64,order[3],order[4],order[5]) 

하지만 오류 ValueError: error setting an array element with a sequence 받고 있어요. 왜 그런가? 미리 도움을 주셔서 감사합니다! NumPy와 버전 1.6.2을 사용하여

답변

2

, dtype = 'datetime64,a5,a5,i4' 의도 DTYPE 발생하지 않습니다 :

In [36]: na_trades = np.zeros((number_of_orders,), dtype = 'datetime64,a5,a5,i4') 
In [37]: na_trades 
Out[37]: array([1970-01-01 00:00:00], dtype=datetime64[us]) 

이 나에게 버그처럼 보이는 - 내가 틀릴 수도 있지만. 대신보십시오 :

na_trades = np.empty(number_of_orders, 
        dtype = [ 
         ('dt', 'datetime64'), 
         ('foo','a5'), 
         ('bar', 'a5'), 
         ('baz', 'i4')]) 
+0

화려한, 나는 거의 잃어버린 희망;) 고마워! –

1

이것은 numpy 배열 (파이썬 목록과 달리)에서 배열의 단일 요소에 시퀀스를 할당 할 수 없기 때문입니다. 파이썬 배열은 비균질 적이기 때문에 (예 : 다른 요소는 다른 유형이 될 수 있습니다.) Numpy 배열은 특정 유형을 가지고있는 반면, 파이썬 배열은 서로 다른 유형입니다 (예 : 다른 요소가 다른 유형 일 수 있음). 유형을 복합 유형 (예 : datetime, 두 개의 문자열 및 int)으로 설정하려고 시도하고 있지만 numpy는 구문이 약간이기 때문에 dtype 문자열에서 datetime64 이후의 모든 것을 무시합니다.

z = np.zeros((5,), dtype = np.dtype([('time','datetime64'),('year','a5'),('month','a5'),('day','i4')])) 

이 사전과 같은 역할을하는 numpy.void 유형을 작성합니다

은 다음보십시오. 예 : 다음을 수행 할 수 있습니다 :

>>> z[0] 
(datetime.datetime(1970, 1, 1, 0, 0), '', '', 0) 

>>> z[0]['time'] 
1970-01-01 00:00:00 

>>> z[0][0] 
1970-01-01 00:00:00 
관련 문제