【发布时间】:2018-03-23 11:09:04
【问题描述】:
我正在使用 geopy 包来搜索他们的坐标的地址,该列返回匹配的地址和坐标
我只想获取坐标
这是一个向您展示其工作原理的测试:
# Test to see if response is obtained for easy address
location = geolocator.geocode("175 5th Avenue NYC", timeout=10)
print((location.latitude, location.longitude))
>>> (40.7410861, -73.9896298241625)
在我的代码中,我有一个包含城市的 CSV,然后使用 geopy 包进行查找
data['geocode_result'] = [geolocator.geocode(x, timeout = 60) for x in data['ghana_city']]
我只想从这里获取坐标
使用 extract 似乎不起作用,尽管正则表达式很好,但它只返回 NaN 值:
p = r'(?P<latitude>-?\d+\.\d+)?(?P<longitude>-?\d+\.\d+)'
data[['g_latitude', 'g_longitude']] = data['geocode_result2'].str.extract(p, expand=True)
data
我感觉这些问题的出现是由于列中从 geopy 返回的对象
正则表达式是正确的,已在 Regexr.com 上验证:
我尝试将列转换为字符串,但是坐标被删除了?!
data['geocode_result2'] = (data['geocode_result2']).astype(str)
data
有人可以帮忙吗?非常感谢
虚拟数据:
我要从中提取坐标的列是 geocode_result2 或 geocode_result
geocode_result2
1 (Agona Swedru, Central Region, Ghana, (5.534454, -0.700763))
2 (Madina, Adenta, Greater Accra Region, PMB 107 MD, Ghana, (5.6864962, -0.1677052))
3 (Ashaiman, Greater Accra Region, TM3 8AA, Ghana, (5.77329565, -0.110766330148484))
获取坐标的最终代码:
data['geocode_result'] = [geolocator.geocode(x, timeout = 60) for x in data['ghana_city']]
x = data['geocode_result']
data.dropna(subset=['geocode_result'], inplace=True)
data['g_latitude'] = data['geocode_result'].apply(lambda loc: loc.latitude)
data['g_longitude'] = data['geocode_result'].apply(lambda loc: loc.longitude)
data
【问题讨论】:
-
试试
p = r'(?P<latitude>-?\d+\.\d+),\s*(?P<longitude>-?\d+\.\d+)'2个值之间有逗号和空格符吧? -
感谢您的帮助,我之前实际上已经尝试过。并且还尝试使正则表达式非常简单。我感觉是 .str 工作不正常
-
当我在列上执行 dtype 时,它返回 'object' 这并不可疑,但我似乎无法在不删除坐标的情况下转换该死的东西,这是我认为我需要的为提取物工作
标签: python regex string geocoding geopy