反向地理编码使用geopy.m获取邮政编码

2024-04-24 09:57:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经试了几个小时了,不知道该怎么办。我有一个包含纬度和经度数据的数据框:

    year  month        lat        lon       SMI
0   2010      1  47.266481  10.149783  0.830187
1   2010      2  47.266481  10.149783  0.754513
2   2010      3  47.266481  10.149783  0.663457
3   2010      4  47.266481  10.149783  0.407255
4   2010      5  47.266481  10.149783  0.972982
5   2010      6  47.266481  10.149783  0.147511
6   2010      7  47.266481  10.149783  0.085912
7   2010      8  47.266481  10.149783  0.936917
8   2010      9  47.266481  10.149783  0.673884
9   2010     10  47.266481  10.149783  0.242676
10  2010     11  47.266481  10.149783  0.797547
11  2010     12  47.266481  10.149783  0.923627
12  2011      1  47.266481  10.149783  0.895137
13  2011      2  47.266481  10.149783  0.471502
14  2011      3  47.266481  10.149783  0.340169

每月我有23199个不同的地理点,我必须将它们与各自的邮政编码(德国)相匹配

基于这个讨论(https://gis.stackexchange.com/questions/352961/convert-lat-lon-to-zip-postal-code-using-python),我提出了以下代码:

import pandas as pd
import geopy

geopy.geocoders.options.default_user_agent = "myMAil"

def get_zipcode(subsmi, geolocator, lat_field, lon_field):
    location = geolocator.reverse((subsmi[lat_field], subsmi[lon_field]))
    return location.raw['address']['postcode']


geolocator = geopy.Nominatim()

zipcodes = subsmi.apply(get_zipcode, axis=1, geolocator=geolocator, lat_field='lat', lon_field='lon')

只要数据帧保持在10行,代码就可以工作。只要我想将该代码应用于包含10行以上的数据帧,就会出现KeyError:“postcode”。 我知道提名限制了一个人可以逆转的点数。有没有人知道我如何修改代码,以便最终逆转我所有的观点

谢谢你的帮助


Tags: 数据代码importfieldgetlocationlonpostcode
1条回答
网友
1楼 · 发布于 2024-04-24 09:57:08

如果限制是如您所想的提名,那么选项可能是将您的数据分成10个数据块,并逐个检查它们,直到找到最接近的解决方案

我还发现有一个允许批量操作的速率限制器功能,这可能也是您的解决方案,我将链接文档

速率限制链接:https://geopy.readthedocs.io/en/latest/index.html?highlight=rate%20limiter#module-geopy.extra.rate_limiter

相关问题 更多 >