2014-12-02 3 views
10

날씨와 날씨, 강수량, 기상 관측소 위도 등의 날씨 데이터가 포함 된 CSV가 있습니다. 각 카테고리의 데이터는 단일 열에 저장됩니다.Python : 배열의 요소 위치 찾기

최대 온도와 최소 온도의 위치를 ​​찾고 싶습니다. 최대 또는 최소값을 찾는 것이 쉽습니다. numpy.min (my_temperatures_column)

위도와 경도를 찾을 수 있도록 최소 또는 최대 위치가 어떻게 위치를 찾을 수 있습니까?

여기 내 시도 :

def coldest_location(data): 

coldest_temp= numpy.min(mean_temp) 

    for i in mean_temp: 
     if mean_temp[i] == -24.6: 
      print i 

Error: List indices must be int

내가 변수로 내 CSV의 각 열을 저장, 그래서 그들은 모든 개별 목록입니다.

lat   = [row[0] for row in weather_data] # latitude 
long   = [row[1] for row in weather_data] # longitude 
mean_temp = [row[2] for row in weather_data] # mean temperature 

내가 제안 list.index에 따라 문제가 해결 된 것입니다 (x)를

mean_temp.index(coldest_temp) 

coldest_location=[long[5],lat[5]] 

확실 질문 내 두 번째 질문을하는 것이 적절한 경우지만, 두 개의 위치가 무엇인지가있는 경우 같은 최소 온도? 어떻게 둘 다 그들의 색인을 찾을 수 있습니까?

+0

. 'min'의 색인 번호를 찾아서 이것을 사용하여 경도와 위도 목록의 같은 위치에있는 요소를 찾을 수 있습니다.'csv' 파일의 스 니펫을 붙이면 쉽게 볼 수 있습니다 – Beginner

+0

[목록에서 항목의 위치를 ​​얻는 방법] (https://stackoverflow.com/questions/364621/how-to)의 복제본이있을 수 있습니다. -get-items-in-a-list) –

답변

27

는 파이썬 목록의 .index(value) 방법을 사용하는 방법에 대한 생각 했습니까? value의 첫 번째 인스턴스가 전달 된 목록에서 인덱스를 반환합니다.

9

실제로 데이터를 보지 않고 특정 경우 최대 및 최소 위치를 찾는 방법을 말하는 것이 어렵지만 일반적으로 다음과 같이 위치를 검색 할 수 있습니다. 또한

In [9]: a=np.array([5,1,2,3,10,4]) 

In [10]: np.where(a == a.min()) 
Out[10]: (array([1]),) 

In [11]: np.where(a == a.max()) 
Out[11]: (array([4]),) 

, 다음과 같이도 수행 할 수 있습니다 :이 아래 단순한 예입니다

In [19]: a=np.array([5,1,2,3,10,4]) 

In [20]: a.argmin() 
Out[20]: 1 

In [21]: a.argmax() 
Out[21]: 4 
4

아론 (Aaron)은 .index(value)을 사용할 수 있지만 value이없는 경우 예외가 발생하므로 절대 발생하지 않을 것입니다.

if value in my_list: 
    value_index = my_list.index(value) 

또는 같은 예외를 잡기가 : 몇 가지 옵션은 다음과 같은 우선 그것의 존재를 확인하여 있습니다

try: 
    value_index = my_list.index(value) 
except: 
    value_index = -1 

당신은 적절한 오류 처리 잘못 갈 수 없다.

+0

두 번째 질문에 "목록 이해력"을 사용할 수 있습니다. 이것들은 까다로울 수 있지만 일단 코드를 붙이면 코드가 매우 작아집니다. 귀하의 경우 : '[i 범위 내 (len (my_list)) my_list [i] == value] ' 은 요청 된 indeces의 목록을 반환합니다. 일치하는 항목이 없으면 목록은 비어 있거나 일치 항목이 있으면 하나 이상의 요소가 있습니다. – Gary02127

3

당신은 수행해야합니다

try: 
    value_index = my_list.index(value) 
except: 
    value_index = -1; 
+0

답변에 대한 설명을 제공해 주시겠습니까? –

0

나는 당신의 변수 mean_temp 가정 것이다 이미에로드 값을 가지고 있으며, NX1 치수 (즉 하나의 행)입니다. 이제 당신이 원하는 것을 달성하기 위해 수행 할 수 있습니다

변경하여 변수의 데이터 유형 : 모든 데이터가 개별 목록에있는 경우

def coldest_location(data): 

    mean_temp = numpy.mat(mean_temp) #data is now matrix type 
    min_index = numpy.nonzero(mean_temp == mean_temp.min()) # this returns list of indexes 
    print mean_temp[min_index[0],min_index[1]] # printing minimum value, i.e -24.6 in you data i believe