如何解决反向地理编码geopy时引发“地址不能为None”错误
有人遇到以下问题吗?我有一个熊猫DataFrame,其中包含可再生能源设施的坐标,并且我尝试使用反向地理编码来获取相关的地址数据。我为此使用了geopy。该代码在我使用的测试样本上运行良好,但是当我尝试将其应用于完整的数据时,它会抛出错误并指出TypeError:“ address”(地址)不得为None。
所以我有一个名为xml_data的pandas DataFrame,其中有一个“ coordinates”列,其中的坐标以例如52.06192、4.53075的形式放置
代码为:
import pandas as pd
import geopy
from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter
import tqdm
#Create an extra column in the xml data to put the coordinates in as 'lat,lon'
xml_data['coordinates'] = xml_data['lat'].map(str) + ',' + xml_data['lon'].map(str)
#Create service provicder and pass timeout to be 10 minutes to prevent timeout errors
locator = Nominatim(user_agent='myGeocoder',timeout=10)
rgeocode = RateLimiter(locator.reverse,min_delay_seconds=0.001)
#Use the reverse code. Add tqdm to monitor progress.
tqdm.tqdm.pandas(desc="progress-bar")
xml_data['address'] = xml_data['coordinates'].progress_apply(rgeocode)
如果不存在特定坐标的地址,我认为基于文档,将返回None值,而不是错误。对可能是什么问题有任何想法吗?
ps:很抱歉,如果我的问题表达得不够清楚,请补充一下。
解决方法
您为 52.06192、4.53075 坐标提供的示例对我有用,我尝试将纬度更改为 89.06192 以重现类似错误。我第一次收到“地址不能为无”,当我添加 Try except 时,它完美无缺。
import pandas as pd
import numpy as np
import geopy
from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter
df = pd.DataFrame({'latitude': [89.06192],'longitude': [4.53075]
})
locator = Nominatim(user_agent="myGeocoder",timeout=10)
df["geom"] = df["latitude"].map(str) + ',' + df['longitude'].map(str)
def rg(x):
try:
rgeocode = RateLimiter(locator.reverse,min_delay_seconds=1,max_retries=2)
except:
return None
df['address'] = df['geom'].progress_apply(rg)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。