Python 反向地理编码(无谷歌API);邮政编码

Python 反向地理编码(无谷歌API);邮政编码,python,pandas,reverse-geocoding,zipcode,Python,Pandas,Reverse Geocoding,Zipcode,将美国地区的地理代码“纬度”和“经度”反译为邮政编码的代码;最初用于确定纽约枪击事件的邮政编码。示例输出: lat lon zipcode 0 40.896504 -73.859042 10470 1 40.732804 -74.005666 10014 2 40.674142 -73.936206 11213 3 40.648025 -73.904011 11236 4 40.764694 -73.9143

将美国地区的地理代码“纬度”和“经度”反译为邮政编码的代码;最初用于确定纽约枪击事件的邮政编码。

示例输出:

    lat         lon         zipcode
0   40.896504   -73.859042  10470
1   40.732804   -74.005666  10014
2   40.674142   -73.936206  11213
3   40.648025   -73.904011  11236
4   40.764694   -73.914348  11103
... ... ... ...
20654   40.710989   -73.942949  11211
20655   40.682398   -73.840079  11416
20656   40.651014   -73.945707  11226
20657   40.835990   -73.916276  10452
20658   40.857771   -73.894606  10458
加载数据集(非必需):

反向地理编码代码:

pip install uszipcode

# Import packages
from uszipcode import SearchEngine
search = SearchEngine(simple_zipcode=True)
from uszipcode import Zipcode
import numpy as np

#define zipcode search function
def get_zipcode(lat, lon):
    result = search.by_coordinates(lat = lat, lng = lon, returns = 1)
    return result[0].zipcode

#load columns from dataframe
lat = df_shooting['Latitude']
lon = df_shooting['Longitude']

#define latitude/longitude for function
df = pd.DataFrame({'lat':lat, 'lon':lon})

#add new column with generated zip-code
df['zipcode'] = df.apply(lambda x: get_zipcode(x.lat,x.lon), axis=1)

#print result
print(df)

#(optional) save as csv
#df.to_csv(r'zip_codes.csv')
注意长时间运行(20k行=5-7分钟)。然而,我们在不利用(付费)谷歌API的情况下设法找出了最有效的代码。

这里是另一个解决方案(包括注释代码):

pip install uszipcode

# Import packages
from uszipcode import SearchEngine
search = SearchEngine(simple_zipcode=True)
from uszipcode import Zipcode
import numpy as np

#define zipcode search function
def get_zipcode(lat, lon):
    result = search.by_coordinates(lat = lat, lng = lon, returns = 1)
    return result[0].zipcode

#load columns from dataframe
lat = df_shooting['Latitude']
lon = df_shooting['Longitude']

#define latitude/longitude for function
df = pd.DataFrame({'lat':lat, 'lon':lon})

#add new column with generated zip-code
df['zipcode'] = df.apply(lambda x: get_zipcode(x.lat,x.lon), axis=1)

#print result
print(df)

#(optional) save as csv
#df.to_csv(r'zip_codes.csv')