У меня есть набор данных с ~ 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
Я уверен, что есть гораздо более элегантный способ сделать это, возможно, он также намного короче. Любое понимание будет оценено.