2012-08-22 3 views
2

데이터가 숫자가 적은 배열 (.csv 파일에서 읽음)이 있습니다. np.genfromtxt의 관련 추출은 다음과 같습니다.numpy.where에서 객체 메서드에 액세스합니까?

dtype = [("Category", "|S10"), 
     ("Status", "|S11"), 
     ("Date_start", object), 
     ("Date_stop", object)], 
names=True, 
converters={2:lambda d:datetime.strptime(d, "%d/%m/%y"), 
      3:lambda d:datetime.strptime(d, "%d/%m/%y")} 
) 

모든 것이 datetime 객체의 요소에 액세스하는 한 가지 예외와 함께 작동합니다.

print inp['Date_start'][1].month #returns 7 
print np.where(inp['Category'] == '"R5"') #returns an array of matching indices 

하지만 다음 코드 줄이 내가 개월 일들이 발생하는 기반으로 결과를 반환 할 수없는 의미 AttributeError: 'numpy.ndarray' object has no attribute 'month'

print np.where(inp['Date_start'].month == 7) 

던졌습니다 : 코드 반환 다음 두 라인은 내가 예상 정확히 , 나는 그것을 필요로한다.

np.where에서 원하는 동작을 얻을 수있는 방법이 있습니까? 다음

def func(a): 
    return a.month 

vfunc = np.vectorize(func) 

및 사용 :

답변

3

당신은 벡터화 속성 게터 정의 할 수

당신이 발견 한 것처럼
np.where(vfunc(inp['Date_start']) == 7) 
+0

부탁드립니다. 감사합니다. –

1

, 당신의 inp['Date_Start']dtype='object'와 같은 표준 ndarray입니다, 그것은 아무튼 그 요소의 속성을 가지고 있지 않습니다.

test = np.fromiter((i.month == 7 for i in inp['Date_start']), 
        count=inp.size, dtype=bool) 

합니다 (count=inp.size보다 효율적으로 실행 np.fromiter을하는 데 도움이 함수의 설명서를 참조하십시오.) :

는 별도로 벡터화 속성에서 당신이 뭔가를 할 수 있습니다 제안 @ user545424 것을 게터.

거기에서 test을 사용하여 원하는 요소를 필터링하거나 np.zeros(test)으로 조건을 만족하는 항목의 색인을 얻을 수 있습니다.

많은 날짜 처리가있는 경우 의 기능 대부분을 인수 한 pandas을 사용하는 것이 좋습니다. numpy의 날짜 지원은 필자가이 글을 쓰면서 실험적으로 간주됩니다.

관련 문제