Csv Choropleth贴图无法为geojson边界渲染着色

Csv Choropleth贴图无法为geojson边界渲染着色,csv,geo,choropleth,folium,Csv,Geo,Choropleth,Folium,Folium使用警察部队边界渲染choropleth地图,但这些边界均为灰色,且与数据框中的数据颜色不匹配 我还确保遵循文件的新版本,即folium.Choropleth。 我还检查了geojson.io中的json,以确保我是class='feature.properties.pfa16nm'上的键 在检查geojson时,该功能用大写字母拼写,但是当我将其更改为此时,会出现错误,并且没有地图渲染。我还重命名了该文件,使其仅具有geojson作为扩展名,但这不起作用 import pandas

Folium使用警察部队边界渲染choropleth地图,但这些边界均为灰色,且与数据框中的数据颜色不匹配

我还确保遵循文件的新版本,即folium.Choropleth。 我还检查了geojson.io中的json,以确保我是class='feature.properties.pfa16nm'上的键 在检查geojson时,该功能用大写字母拼写,但是当我将其更改为此时,会出现错误,并且没有地图渲染。我还重命名了该文件,使其仅具有geojson作为扩展名,但这不起作用

import pandas as pd
import folium
import json
import os
adults_trafficked = pd.read_excel('Adults trafficked.xlsx')
force_boundaries = 'Police_Force_Areas_December_2016_Generalised_Clipped_Boundaries_in_England_and_Wales.geojson.json'

m = folium.Map([52.6333, -1.1333], zoom_start=4)
folium.Choropleth(
    geo_data=force_boundaries,
    data=adults_trafficked,
    columns=['Police_Force', 'Adults_Exploited'],
    key_on='feature.properties.pfa16nm',
    threshold_scale=[0, 25, 50, 75, 100, 125, 150, 175],
    fill_color='BuPu',
    legend_name='Trafficked Humans',
).add_to(m)
m
我得到的输出


我希望传单地图能够根据dataframe列数据将每个警察边界着色到适当的级别。Chorpleth贴图使用边界完美渲染,但这些边界均为灰色,不包含预期的色调范围。请

问题是excel文件与json文件不匹配。当你使用

columns=['Police_Force', 'Adults_Exploited'],
key_on='feature.properties.pfa16nm',
警察应该匹配json文件中的pfa16nm

此代码将在json中为您提供
pfa16nms

import json 
policejson = json.load(open('Police_Force_Areas_December_2016_Generalised_Clipped_Boundaries_in_England_and_Wales.geojson.json')) 
for x in policejson['features'] : 
    print (x['properties']['pfa16nm']) 

然后,您需要修复excel文件,并确保
Police\u Force
列与json文件中的名称匹配。

问题是密钥名称与数据库中的Police\u Force名称不匹配。因此,在分析您的数据以及json文件之后,我对您的数据进行了一些预处理,以便名称与json文件中的键匹配

这是一个完整的解决你的问题的办法

# import libraries
import pandas as pd
import folium
import json
import webbrowser

# read data
adults_trafficked = pd.read_excel('Adults trafficked.xlsx')

# Pre processing of data
adults_trafficked['Police_Force'] = adults_trafficked['Police_Force'].replace('Police|Constabulary','', regex=True, ).replace('&','and', regex=True)
adults_trafficked.loc[adults_trafficked['Police_Force'] == "Metropolitan  Service",'Police_Force' ] = 'Metropolitan Police'

# remove any trailing or leading white spaces
adults_trafficked['Police_Force'] = adults_trafficked['Police_Force'].str.strip()

# border json file 
force_boundaries = 'Police_Force_Areas_December_2016_Generalised_Clipped_Boundaries_in_England_and_Wales.geojson.json'

# choropleth map
m = folium.Map([52.6333, -1.1333], zoom_start=7)

m.choropleth(
    geo_data=force_boundaries,
    data=adults_trafficked,
    columns=['Police_Force', 'Adults_Exploited'],
    key_on='feature.properties.pfa16nm',
    threshold_scale=[0, 40, 80, 120, 160, 200],
    fill_color='BuPu',
    legend_name='Trafficked Humans',
)
m.save('map.html')
webbrowser.open('map.html')
请注意,阈值_刻度的长度不能超过6。我看得出你的是8岁。此外,json文件中只有44个警察数据,而数据集的长度为47。因此,folium忽略了不匹配的3个数据。 这就是你将得到的


如果您在理解代码的任何部分时遇到困难,请在下面进行评论。

我也有同样的问题,无法找到解决方案。问题链接:请在驱动器上发布您的数据和geojson数据,然后共享链接。您共享的链接是针对某个页面的。我们没有足够的时间搜索下载按钮。请发布您的问题的最低版本,以便我们能够快速有效地帮助您。请更新数据和geojson文件,以便我能够回答您的问题。我已经创建了一个包含必要信息的github,感谢您预期的帮助。我最初的想法是,我必须手动编辑json文件。数据文件与json文件中的
pfa16nm
不匹配。如果您能够使它们匹配,那么您的代码应该可以工作。例如,excel文件有
Cumbria Constabulary
,而json文件有
Cumbria
;这是一个宝贵的教训!我将很快用工作代码更新我的新github。Himanshu Poddar我已经仔细研究了你的答案,它也对我起了作用,允许我用熊猫编辑,从而节省了我纠正警察部队名称错误对齐的时间。我会将这一新的学习内容整合到一个更新的笔记本中,并上传到github,在您回答这一问题后,我已经表示了适当的感谢。感谢您的时间和教育。感谢您的好意这也为我工作,并提供了使用熊猫更改数据帧的方法。我保留了folium.Choropleth()以避免遭到反对的警告。还感谢您在阈值刻度上对x6长度的说明,我会记住这一点。我还发现3个缺失的值可以忽略。这有很好的理由,因为它只为英格兰和威尔士赢得了分数;所以苏格兰警察局和贝尔法斯特警察局不包括在内,最后英国交通警察局也没有地理边界,这就解释了这一点。感谢你的工作。