使用“城市”和“州”列查找纬度和经度

时间:2020-02-24 06:50:57

标签: python pandas numpy machine-learning data-processing

我有一列带有“ CITY”和“ STATE”字符串的列。我尝试使用来自geopy库的geocoder来计算纬度和经度,但由于它超过了请求数,因此超时,并且数据集中大约有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 个答案:

答案 0 :(得分:1)

我认为您可以将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)
相关问题