Reverse Geopy地理编码Pandas

3

我在Jupyter Notebook中有一个数据框,其中包含GPS坐标列表,使用from geopy.geocoders import Nominatimimport pandas as pd

    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坐标对应的地址填充到该列中。

为了实现这个目标,我尝试了以下方法:

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

但是收到了以下错误信息:

ValueError: 必须是坐标对或点。

然后我创建了另一个列[LatLong]。

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

我随后运行了以下代码:
df['address'] = geolocator.reverse(df['LatLong'])

然而,我只得到了完全相同的错误信息。
我使用的代码是从本网站上类似问题的其他答案和GeoPy文档中适应的,因此我认为我的代码不够精确,无法正确地提取GPS坐标。
有人能指出我的错误吗?
2个回答

1

问题

你的错误信息显示:

ValueError: 必须是坐标对或点

在以下两个情况中:

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

并且

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

你正在将一个pandas结构发送到一个无法理解它们的方法中。

解决方案

我无法测试这个,但解决方案可能看起来像:

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

嗨,感谢您的帮助!我尝试了您的解决方案,但不幸的是,我收到了错误消息:GeocoderTimedOut:('服务超时','发生在索引231处')。如果您认为有用的话,我很乐意提供更多信息。 - DreamingMan
那将是完全不同的问题......因此是一个不同的问题。可悲的是,这是我不熟悉的话题。 - Stephen Rauch
好的,没问题。我感谢你抽出时间来帮助我。 - DreamingMan

0

大量的DataFrame行可能会产生大量的地理编码请求到地理编码服务,这可能会被服务限制(例如通过返回Too Many Requests 429 HTTP错误或超时)。

geopy.extra.rate_limiter.RateLimiter类提供了一个方便的包装器,可用于自动添加延迟以减少地理编码调用对地理编码服务的负载。此外,它可以重试失败的请求并吞咽单个行的错误。

我在Geopy文档中找到了这个。也许你应该更改tre RateLimiter,看看是否有帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接