Найти широту и долготу, используя столбцы Город и Штат - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть столбец со строками 'CITY' и 'STATE'. Я пытался использовать геокодер из библиотеки геопов для вычисления широты и долготы, но время ожидания превышало количество запросов, а в наборе данных было около 85895 строк. Таким образом, я сделал подсчет значений для столбца «CITY_STATE», и есть 1340 значений. Есть ли способ найти широту и долготу для этих 1340 значений, а затем сопоставить эти значения с соответствующими значениями «ГОРОД» и «СОСТОЯНИЕ».

from opencage.geocoder import OpenCageGeocode
key = 'my_key'  # get api key from : https://opencagedata.com
geocoder = OpenCageGeocode(key)
list_lat = []   # create empty lists

list_long = []
for index, row in train.iterrows(): # iterate over rows in dataframe



City = row['CITY']
State = row['STATE']       
query = str(City)+','+str(State)

results = geocoder.geocode(query)   
lat = results[0]['geometry']['lat']
long = results[0]['geometry']['lng']

list_lat.append(lat)
list_long.append(long)

# create new columns from lists    

train['lat'] = list_lat   

test['lon'] = list_long

1 Ответ

1 голос
/ 24 февраля 2020

Я думаю, что вы можете использовать GroupBy.apply с пользовательской функцией и объединить оба столбца в серии s:

s = train['CITY'].astype(str) + ', ' + train['STATE'].astype(str)

def func(x):
    results = geocoder.geocode(x.name) 
    x['lat'] = results[0]['geometry']['lat']
    x['lon'] = results[0]['geometry']['lng']
    return x

train = train.groupby(s).apply(func)
...