You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Geopandas仅聚焦美国邮政编码?纽约编码解析异常求助

问题

运行以下代码解析纽约区域邮政编码时,得到了部分非美国的dropoff_location、dropoff_lat和dropoff_lon结果,但所有邮政编码都属于纽约市区域,请问哪里操作有误?

import geopandas
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="ryan_app")
 
# 应用速率限制器
from geopy.extra.rate_limiter import RateLimiter
geocode = RateLimiter(geolocator.geocode)
 
# 应用到DataFrame
df['dropoff_location'] = df['dropoff_zip'].apply(geocode)
df['dropoff_lat'] = df['dropoff_location'].apply(lambda x: x.latitude if x else None)
df['dropoff_lon'] = df['dropoff_location'].apply(lambda x: x.longitude if x else None)
 
df.head()

运行结果:

pickup_datetime dropoff_datetime    trip_distance   fare_amount pickup_zip  dropoff_zip time_of_trip    dropoff_location    dropoff_lat dropoff_lon
95  2016-02-02 14:00:28 2016-02-02 14:20:22 2.04    13.5    10001   10199   0 days 00:19:54 (Manhattan, New York County, City of New York,...   40.751528   -73.995849
96  2016-02-10 00:25:33 2016-02-10 00:30:09 1.03    5.5 10001   10011   0 days 00:04:36 (Manhattan, New York County, City of New York,...   40.740972   -73.999560
97  2016-02-19 09:19:18 2016-02-19 09:34:41 2.10    11.5    10002   10001   0 days 00:15:23 (Корольовський район, Житомир, Житомирська міс...   50.269960   28.702845
98  2016-02-12 21:14:59 2016-02-12 21:22:33 0.93    6.5 10011   10012   0 days 00:07:34 (Bechloul, Daïra Bechloul, Bouira, 10012, Algé...   36.312195   4.074957
99  2016-02-04 21:25:09 2016-02-04 21:35:38 1.70    9.0 10028   10065   0 days 00:10:29 (San Germano Chisone, Torino, Piemonte, 10065,...   44.894901   7.235602
解决方法
  • 问题原因:Nominatim默认会在全球范围内搜索匹配的邮政编码,不少国家/地区存在和美国纽约重复的5位邮编,导致返回了错误的地理信息。
  • 修改方案:调用geocode时添加搜索范围限制,明确指定仅在美国境内查找邮政编码,避免跨区域匹配。

修改后的代码:

import geopandas
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="ryan_app")
 
# 应用速率限制器,同时添加美国区域搜索限制
from geopy.extra.rate_limiter import RateLimiter
# 用字典query明确指定搜索类型为邮政编码,且限制在美国境内
geocode = RateLimiter(lambda zip_code: geolocator.geocode(query={'postalcode': zip_code, 'country': 'us'}))
 
# 应用到DataFrame
df['dropoff_location'] = df['dropoff_zip'].apply(geocode)
df['dropoff_lat'] = df['dropoff_location'].apply(lambda x: x.latitude if x else None)
df['dropoff_lon'] = df['dropoff_location'].apply(lambda x: x.longitude if x else None)
 
df.head()
  • 补充说明:使用字典形式的query参数可以精准限定搜索类型为邮政编码,加上country参数锁定美国范围后,Nominatim只会返回美国境内匹配的邮编结果,彻底解决跨区域匹配错误的问题。

内容的提问来源于stack exchange,提问作者ASH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:46:08