【问题标题】:Find latitude and longitude using City and State columns使用 City 和 State 列查找纬度和经度
【发布时间】:2020-02-24 06:50:57
【问题描述】:

我有一列包含“CITY”和“STATE”字符串。我尝试使用 geopy 库中的地理编码器来计算纬度和经度,但它超时,因为它超过了请求的数量,而且数据集中大约有 85895 行。所以我对“CITY_STATE”列进行了计数,有 1340 个值。有没有办法可以找到这 1340 个值的纬度和经度,然后将这些值映射到相应的“CITY”和“STATE”。

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

【问题讨论】:

  • 您可以将代码添加到问题中吗?
  • 您可以使用this在请求之间添加延迟以防止超时

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


【解决方案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)

【讨论】:

  • 这种方法运行得非常快。但我收到一条错误消息,指出“'NoneType' 对象没有属性 'latitude'”。没有缺失值为什么会显示该错误?谢谢。
  • @GunjanPatait - 输入数据中没有缺失值或Nones?如果在s = train['CITY'].astype(str) + ', ' + train['STATE'].astype(str) 之前通过train = train.dropna(subset=['CITY','STATE']) 删除可能丢失的行如何工作?
  • 使用 train = train.dropna(subset=['CITY','STATE']) 前后的数据集形状。我还是不明白为什么会抛出这个错误?
  • @GunjanPatait - 什么是Dataset shape before and after?有区别吗?
  • 我很抱歉不提了。删除缺失值前后是一样的。
猜你喜欢
  • 1970-01-01
  • 2016-05-08
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多