перебор панд данных, геокодирование, вечность? - PullRequest
0 голосов
/ 23 июня 2019

У меня есть набор данных с ~ 10k записей, и я не могу каждый раз запрашивать координаты для всех из них, так как это займет очень много времени. Поэтому идея состояла в том, чтобы установить значения первой строки, а затем выполнить итерацию по фрейму данных, проверяя, равно ли новое место старому, и если это так, мне не нужно запрашивать новые координаты.

import time
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="xxxxx")
location = geolocator.geocode(house['place_name'].iloc[0])
house['lat'].iloc[0]=location.latitude
house['lon'].iloc[0]=location.longitude
for i in range(1,len(house)):
    if house['place_name'].iloc[i]==house['place_name'].iloc[i-1]:
        house['lat'].iloc[i]= house['lat'].iloc[i-1]
        house['lon'].iloc[i]= house['lon'].iloc[i-1]
    else:
        try:
            location = geolocator.geocode(house['place_name'].iloc[i])
            house['lat'].iloc[i]=location.latitude
            house['lon'].iloc[i]=location.longitude
        except:
            print('error')

Теперь код работает очень супер медленно (без явной ошибки), но я получаю несколько из следующих "предупреждений"

A value is trying to be set on a copy of a slice from a DataFrame

Я уверен, что есть гораздо более элегантный способ сделать это, возможно, он также намного короче. Любое понимание будет оценено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...