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

Pandas DataFrame字典列取值报错float对象无get属性如何解决

报错原因

报错核心是street address列不是所有行都是字典类型,存在部分空值被Pandas自动解析为float类型的NaN:你测试的第0行确实是字典,但其他行存在缺失值,Google Maps API返回空结果时你的数据入库逻辑没有做非空校验,导致空值被转为NaN(Pandas中缺失值默认类型为float),apply遍历到这些行时,NaN调用get方法就会抛出该错误。

问题验证

你可以运行以下代码确认异常行的存在:

all_addr['street address'].apply(lambda x: type(x)).value_counts()

运行后输出结果中会出现float类型的条目,对应数量就是API返回为空的行数。

解决方案
  • 方案1:保留所有行,空值对应字段返回None
all_addr['address_components'] = all_addr['street address'].apply(lambda x: x.get('address_components') if isinstance(x, dict) else None)
  • 方案2:先过滤掉无效空行,只处理正常返回的字典数据
# 筛选出字段为字典类型的有效行
valid_addr = all_addr[all_addr['street address'].apply(lambda x: isinstance(x, dict))].copy()
# 提取目标字段
valid_addr['address_components'] = valid_addr['street address'].apply(lambda x: x.get('address_components'))
  • 方案3:自动展开所有字典字段到独立列(无需手动写get逻辑)
    如果需要提取字典内的所有字段(包括经纬度、格式化地址等),可以直接用pd.json_normalize更便捷:
# 筛选有效行
valid_addr = all_addr[all_addr['street address'].apply(lambda x: isinstance(x, dict))].copy()
# 自动展开字典所有层级的字段
expand_addr_df = pd.json_normalize(valid_addr['street address'])
# 合并回原表
final_df = pd.concat([valid_addr.reset_index(drop=True), expand_addr_df.reset_index(drop=True)], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:48:01