reverse - 反向地理编码 geopy 时出现“`address` must not be None”错误
问题描述
有没有人遇到过以下问题?我有一个包含可再生能源装置坐标的 pandas DataFrame,我尝试使用反向地理编码来获取相关的地址数据。我为此使用了geopy。该代码在我使用的测试样本上运行良好,但是当我尝试将它应用于它抛出的完整数据和错误时,它显示 TypeError:'address' must not be None。
所以我有一个名为 xml_data 的 pandas DataFrame,其中有一个“坐标”列,其中坐标的形式为: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)
推荐阅读
- http - 为什么从 HTTP/1.1 中删除 HTTP 状态代码 102
- python - 我们如何在烧瓶应用程序中嵌入散景布局对象(包含多个绘图和小部件)?
- python - Redirecting user values from one template to another - Django
- python-3.x - 停止 unittest 从导入模块运行代码
- php - PHP 向 Paypal 回显一个值(加密)
- python - 如何在networkx的函数定义中调用图形?
- android - com.google.android.material.tabs.TabLayout 的自定义样式
- c# - 无法从 'void' 转换为 'System.Collections.Generic.List
C# - c - c中的错误:声明在全局范围内隐藏了一个变量
- javascript - onclick 事件发生而没有实际发生点击事件 - js