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
相关产品推荐
相关产品推荐

