关于python:反向geopy地理编码熊猫

reverse geopy geocoding pandas

我在Jupyter笔记本中有以下数据框,其中有一个与from geopy.geocoders import Nominatimimport pandas as pd的GPS坐标列表。

1
2
3
4
5
6
7
    stop_id     Lat         Long
0   2        53.352280  -6.263668
1   3        53.352345  -6.263758
2   4        53.352604  -6.264143
3   6        53.352783  -6.264417
4   7        53.352867  -6.264543
5   8        53.353287  -6.265152

我一直在尝试在GPS坐标中添加一个新的列,其中填充了相应的地址。

为了做到这一点,我试过

1
df['address'] = geolocator.reverse((df['Lat'], df['Long']))

但收到以下错误消息:

ValueError: Must be a coordinate pair or Point.

然后我又创建了一个专栏[拉特隆]

1
2
3
4
5
6
7
8
9
10
df['LatLong'] = df[df.columns[1:]].apply(
    lambda x: ', '.join(x.dropna().astype(float).astype(str)),axis=1)

    stop_id     Lat         Long         LatLong
0   2       53.352280   -6.263668    53.35228, -6.263668
1   3       53.352345   -6.263758    53.352345, -6.263758
2   4       53.352604   -6.264143    53.352604, -6.264143
3   6       53.352783   -6.264417    53.352783, -6.264417
4   7       53.352867   -6.264543    53.352867, -6.264543
5   8       53.353287   -6.265152    53.353287, -6.265152

然后我运行以下代码:

1
df['address'] = geolocator.reverse(df['LatLong'])

但是,我只收到完全相同的错误消息。

我上面使用的代码是从本网站的其他答案改编而来的,适用于类似的问题和地质调查的文档,因此我假设我的代码不够精确,无法以正确的方式提取地质调查的GPS坐标。

有人能向我指出我的错误吗?


问题

您的错误消息显示:

ValueError: Must be a coordinate pair or Point

两者都有:

1
df['address'] = geolocator.reverse((df['Lat'], df['Long']))

1
df['address'] = geolocator.reverse(df['LatLong'])

您正在将熊猫结构发送到一个不理解它们的方法中。

解决方案

我无法对此进行测试,但解决方案可能看起来像:

1
2
df['address'] = df.apply(
    lambda row: geolocator.reverse((row['Lat'], row['Long'])), axis=1)


"大量数据帧行可能会产生大量对地理编码服务的地理编码请求,这些请求可能会受到服务的限制(例如,返回过多的请求429 HTTP错误或超时)。

geopy.extra.rate_limiter.ratelimiter类提供了一个方便的包装器,可用于在geocoding调用之间自动添加延迟,以减少geocoding服务的负载。此外,它还可以重试失败的请求,并接收个别行的错误。"

我在地质文献上找到了这个。也许你应该换一下Tre Ratelimiter看看有没有帮助