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

将字典列表转为Pandas DataFrame时出现NoneType属性错误求助

解决将字典列表转为Pandas DataFrame时的AttributeError: 'NoneType' object has no attribute 'keys'问题

嘿,这个问题我太熟了——你的geocode_list里绝对混进了None值!Pandas在构建DataFrame的时候,会挨个读取列表里每个元素的keys()来确定列名,一旦碰到None(它根本没有keys这个方法),就会直接抛出这个异常。

先确认问题根源

你可以跑几行代码快速验证:

# 统计列表里有多少个None
print(f"列表里一共发现{geocode_list.count(None)}个None值")

# 或者定位到具体是哪些位置的元素出问题
for idx, item in enumerate(geocode_list):
    if not isinstance(item, dict):
        print(f"索引{idx}的元素不是字典:值为{item},类型是{type(item)}")

两种解决思路

1. 先清理列表,过滤掉None值

直接在创建DataFrame前把无效的None剔除:

# 只保留列表中的字典元素,过滤掉None
cleaned_geocodes = [item for item in geocode_list if item is not None]
temp_df = pd.DataFrame(cleaned_geocodes)

2. 从源头避免生成None

既然你提到是地理编码(geocode)得到的列表,大概率是某些地址编码失败时返回了None。你可以在生成geocode_list的环节就处理这种情况:

# 举个例子,假设你是循环调用地理编码函数
geocode_list = []
for address in your_address_list:
    geocode_result = your_geocode_function(address)  # 你的地理编码方法
    if geocode_result is not None:  # 只保留编码成功的结果
        geocode_list.append(geocode_result)
# 再创建DataFrame就不会报错了
temp_df = pd.DataFrame(geocode_list)

这样处理后,生成的DataFrame就会正常包含id、lat、lng字段,类型也会和你预期的int、float、float一致啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:11:28