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

Python使用Folium绘制洛杉矶邮编Choropleth地图报isnan错误如何解决

错误原因

报错是因为你传入Choropleth的数值列Avg. Income/H/hold为字符串类型,不是合法的数值格式,folium内部调用np.isnan()过滤空值时,无法对字符串类型执行判断,就触发了类型错误。你从谷歌表格导出的收入数据大概率带$符号、千位分隔符逗号,pandas读入时会识别为object类型而非数字。

修复步骤

  • 第一步:清理收入列的特殊字符,转换为数值类型,同步处理空值
    在你做完LA_avg_income_clean重命名列的操作后,添加收入列清理逻辑,去掉符号后转成数值格式
  • 第二步:删除冗余的索引设置逻辑,你之前代码中重复设置zipcode_索引、重复转换zipcode为字符串的操作属于无效代码,只需要保证geojson和收入表的zipcode都是字符串类型即可匹配
  • 第三步:修正Choropleth的参数配置,保证数据列和geo的关联键匹配

修改后可运行的核心代码片段

# 前面的依赖安装、导入、底图初始化、geojson拉取代码保持不变
CA_househould_income = '1Gfa2sG0SzDdgV9bztVZvZh8U9ti0ei_BpZr3swGY3mg'
CA_househould_income_file = f'https://docs.google.com/spreadsheets/d/{CA_househould_income}/export?format=csv'
r2 = requests.get(CA_househould_income_file)
CA_HI = pd.read_csv(BytesIO(r2.content))

LA_avg_income = CA_HI['zip_code'].isin(LA_zipcodes)
LA_avg_income_clean = CA_HI[LA_avg_income].reset_index(drop=True)
LA_avg_income_clean.rename(columns = {'zip_code':'zipcode'}, inplace= True)
# 转换zipcode为字符串,保证和geojson的zipcode格式匹配
LA_avg_income_clean['zipcode'] = LA_avg_income_clean['zipcode'].astype('str')

# 新增:清理收入列为数值类型
LA_avg_income_clean['Avg. Income/H/hold'] = LA_avg_income_clean['Avg. Income/H/hold'].str.replace('$', '', regex=False)
LA_avg_income_clean['Avg. Income/H/hold'] = LA_avg_income_clean['Avg. Income/H/hold'].str.replace(',', '', regex=False)
LA_avg_income_clean['Avg. Income/H/hold'] = pd.to_numeric(LA_avg_income_clean['Avg. Income/H/hold'], errors='coerce')
# 可选:删掉收入列为空的行,避免后续渲染异常
LA_avg_income_clean = LA_avg_income_clean.dropna(subset=['Avg. Income/H/hold'])

# 过滤geojson里有对应收入数据的邮编
LA_zipcode_clean_final = df_geojson[df_geojson['zipcode'].isin(LA_avg_income_clean['zipcode'])].reset_index(drop=True)
zip_boundries1 = LA_zipcode_clean_final.to_json()

# 生成分级统计地图
folium.Choropleth(
    geo_data= zip_boundries1,
    name= 'choropleth',
    data= LA_avg_income_clean,
    columns= ['zipcode','Avg. Income/H/hold'],
    key_on= 'feature.properties.zipcode',
    fill_color= 'YlGn',
    fill_opacity=0.3,
    line_opacity=0.9,
    legend_name= "Average Income per Household in USD",
).add_to(LA_map)

display(LA_map)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:30:02