#python #pandas #numpy
Вопрос:
Я пытаюсь разделить карту Панамы на равноудаленные широтные,длинные координаты и использую numpy, чтобы создать линейное пространство, которое разделит их, основываясь на длинных широтах в нижней, нижней, верхней и верхней части карты. Для этого я использую вложенный цикл for.
Проблема в том, что, несмотря на правильное количество уникальных широт в окончательном словаре, я получаю только одну уникальную долготу. Можете ли вы помочь мне исправить ошибку в цикле, чтобы окончательный словарь, помещенный в конечный кадр данных, давал 646 в ответ на
grid_centroid.long.nunique()
Огромное спасибо!
import pandas as pd
import numpy as np
bottomLeft = (7.239013, -82.94546842973114)
bottomRight = (7.239013, -77.177479)
topLeft = (9.62079503922844, -82.94546842973114)
topRight = (9.62079503922844, -77.177479)
df = pd.read_csv('sites_unique.csv')
cols = np.linspace(bottomLeft[1], bottomRight[1], num=276)
rows = np.linspace(bottomLeft[0], topLeft[0], num=646)
df['col'] = np.searchsorted(cols, df['Average of lat'], 'right')
df['row'] = np.searchsorted(rows, df['Average of long'], 'right')
grid_dict = {'lat':[],'long':[]}
for l in range(275):
lat_index_init = l
for i in range(645):
lon_init_index = i
grid_dict['lat'].append(rows[lat_index_init])
grid_dict['long'].append(cols[lon_index_init])
i 1
l 1
i = 0
grid_centroid = pd.DataFrame(grid_dict)
Ответ №1:
быстрое решение, понял это, и это было очень просто
bottomLeft = (7.239013, -82.94546842973114)
bottomRight = (7.239013, -77.177479)
topLeft = (9.62079503922844, -82.94546842973114)
topRight = (9.62079503922844, -77.177479)
cols = np.linspace(bottomLeft[1], bottomRight[1], num=646)
rows = np.linspace(bottomLeft[0], topLeft[0], num=275)
grid_dict = {'lat':[],'long':[]}
for l in range(275):
lat_index_init = l
for i in range(645):
grid_dict['lat'].append(rows[l])
grid_dict['long'].append(cols[i])
i 1
l 1
i = 0
дает желаемый результат. Я надеюсь, что это поможет другим людям, пытающимся создать геопространственные сетки
Всего наилучшего