Python绘制英国郡热力图失败:TypeError报错排查
英国郡热力图 TypeError 排查与绘图失败分析
一、报错核心原因
TypeError: cannot unpack non-iterable float object 本质是代码尝试对单个浮点数执行解包操作(例如 x, y = 51.5),结合你的场景,大概率出在以下两个环节:
- 坐标字典格式错误:ChatGPT生成的郡坐标字典中,部分条目值不是
(纬度, 经度)这样的可迭代元组/列表,而是单个浮点数,导致解包时失败。 - GeoPandas几何操作错误:加载
gb_100km.shp后,代码对geometry字段的坐标提取逻辑有误,误将单个浮点值当作可迭代结构解包。
二、分步排查与修复
1. 验证并修正坐标字典
打印字典内容,检查所有坐标是否为长度2的可迭代结构:
county_coords = {你的郡坐标字典} for county, coords in county_coords.items(): if not isinstance(coords, (tuple, list)) or len(coords) != 2: print(f"异常条目:{county} -> {coords}")
- 对异常条目进行修正,确保所有坐标为
(lat, lon)或(lon, lat)格式(注意GeoPandas通常采用(lon, lat)的顺序,需与数据集字段匹配)。
2. 检查数据集经纬度有效性
确认数据集的latitude和longitude字段无异常值:
import pandas as pd df = pd.read_csv('你的数据集文件.csv') # 替换为你的数据加载方式 print(df[['latitude', 'longitude']].info()) print("缺失值数量:") print(df[['latitude', 'longitude']].isnull().sum())
- 若存在非数值类型或缺失值,需清洗数据(删除异常行或用均值/插值填充)。
3. 排查GeoPandas网格文件操作
加载网格文件后,检查几何字段类型并修正坐标提取逻辑:
import geopandas as gpd grid = gpd.read_file('gb_100km.shp') # 查看几何类型(应为Polygon/MultiPolygon等) print(grid.geometry.type.unique())
- 若代码中存在类似
x, y = grid.geometry的错误写法,需改为GeoPandas标准的坐标提取方式,例如遍历单个几何对象:for geom in grid.geometry: # 提取多边形的边界坐标 x, y = geom.exterior.coords.xy
三、绘图逻辑优化建议
- 坐标系统一:GeoPandas默认采用WGS84(EPSG:4326),若
gb_100km.shp使用其他坐标系,需转换匹配:grid = grid.to_crs(epsg=4326) - 热力图匹配逻辑:若绘制网格热力图,需将
normalized_count数据通过郡名称关联到对应的网格区域,而非直接使用点坐标,避免地理范围不匹配问题。
内容的提问来源于stack exchange,提问作者GaB
相关产品推荐
相关产品推荐

