我有一列带有“ 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
答案 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)