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

为何无法用uszipcodes的SearchEngine()获取城市名?

问题:使用uszipcode库为DataFrame添加城市名列时出现错误

我有一个包含客户邮编的pd.DataFrame,尝试用uszipcodes库的SearchEngine()添加对应城市名的新列,代码如下:

!pip install uszipcode
from uszipcode import SearchEngine, SimpleZipcode
import numpy as np
import pandas as pd

data = pd.read_csv(dataset)

data['City_Name'] = np.nan
search = SearchEngine()
for i in data['ZIPCode']:
    data['City_Name'] = search.by_zipcode(i).city

运行后出现以下错误:


AttributeError Traceback (most recent call last)
Input In [35], in <cell line: 2>()
1 search = SearchEngine()
2 for i in data['ZIPCode']:
3 #city = search.by_zipcode(i).city
4 SearchEngine().by_zipcode(i).city

AttributeError: 'NoneType' object has no attribute 'city'

单独测试city = search.by_zipcode(75024).city可正常运行,排查发现是邮编92717导致报错。删除该行后重新运行,又出现新错误:

--------------------------------------------------------------------------- TypeError Traceback (most recent call
last) Input In [96], in <cell line: 4>()
2 search = SearchEngine()
3 num = 0
----> 4 for i in data['ZIPCode']:
5 data['City_Name'] = search.by_zipcode(i).city

TypeError: 'NoneType' object is not subscriptable


解决方案

错误原因

  1. AttributeError:当邮编无效/不存在时,search.by_zipcode(i)会返回None,此时直接访问.city就会触发错误,因为None没有该属性。
  2. TypeError:删除报错行后出现的问题,大概率是ZIPCode列存在空值(NaN),遍历过程中遇到None类型值导致无法迭代。
  3. 原循环逻辑错误:每次赋值都会覆盖整列的City_Name,最终只会保留最后一个邮编对应的城市名。

修复后的代码

!pip install uszipcode
from uszipcode import SearchEngine
import pandas as pd

# 读取数据
data = pd.read_csv(dataset)

# 初始化SearchEngine实例
search = SearchEngine()

def get_city_from_zip(zip_code):
    # 处理空值情况
    if pd.isna(zip_code):
        return None
    # 统一转换为字符串,避免整数格式邮编丢失前导零
    zip_str = str(int(zip_code)) if isinstance(zip_code, (int, float)) else str(zip_code).strip()
    # 查询邮编,判断返回结果是否有效
    zip_result = search.by_zipcode(zip_str)
    return zip_result.city if zip_result else None

# 使用apply批量生成城市名列,避免循环覆盖问题
data['City_Name'] = data['ZIPCode'].apply(get_city_from_zip)

关键优化点

  • 用apply替代循环,避免整列赋值覆盖的低级错误。
  • 增加空值判断,处理ZIPCode列的缺失值。
  • 统一邮编为字符串格式,防止前导零丢失(如00123这类特殊邮编)。
  • 对查询结果做有效性校验,避免None对象访问属性的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:01:29