将字典列表转为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
相关产品推荐
相关产品推荐

