反向地理编码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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...