使用Folium绘制Choropleth地图时报TypeError: ufunc 'isnan' not supported如何解决
错误原因
你遇到的TypeError: ufunc 'isnan' not supported报错,根源是Folium处理分级色彩的数值列时,你传入的men列不是合法的数值类型:
- 读取csv后
men列可能因为包含千分位逗号、空格、特殊字符,被pandas识别为object(字符串)类型 - numpy的
isnan方法仅支持数值类型输入,对字符串类型会直接触发类型错误
修复方案
在读取csv文件后、调用folium.Choropleth前,添加对men列的清理转换逻辑即可,步骤如下:
- 把
men列的所有内容转为字符串,清除千分位逗号、首尾空格 - 将清理后的内容强制转为数值类型,无法转换的异常值统一设为空值
- 可选删除
men列为空的行,避免后续地图渲染出现空白异常
修复后的完整代码如下:
import folium import pandas as pd geojson_path = "map.geojson" m = folium.Map(location = [42.688534, 25.280583], zoom_start = 7) table_path = "table2.csv" df = pd.read_csv(table_path, encoding= 'unicode_escape') # 新增:清理并转换men列为数值类型 df['men'] = pd.to_numeric(df['men'].astype(str).str.replace(',', '').str.strip(), errors='coerce') # 新增:删除men列为空的无效行 df = df.dropna(subset=['men']) folium.Choropleth( geo_data = geojson_path, name = "choropleth", data = df, columns = ["state_code", "men"], key_on = "feature.properties.state_code", fill_color = "BuPu", fill_opacity= 0.7, line_opacity= 0.2, legend_name="Men population(n)" ).add_to(m) m
注:额外调整了变量命名,避免和内置的
json、map关键字重名引发潜在冲突。
内容的提问来源于stack exchange,提问作者marto2253
相关产品推荐
相关产品推荐

