2016-06-24 8 views
1

Я заинтересован в создании карты Choropleth с Python на уровне графства. Когда я запускаю свой код, не пытаясь привязать к нему данные, я получаю красивые линии графства. Однако всякий раз, когда я пытаюсь связать свои данные, я получаю KeyError: None.Python Folium Choropleth Map KeyError: None

Из моего поиска это выглядело так, как будто это связано с тем, что значения в GeoJson не совпадают со значениями в файле данных ... но я пошел вручную и проверил и уже отредактировал данные, поэтому есть точные такое же количество строк и точные значения ... по-прежнему получают ту же ошибку. Очень расстраивает :(

Мой код:

import folium 
from folium import plugins 
from folium.plugins import Fullscreen 
import pandas as pd 

county_geo = 'Desktop\counties.json' 
county_data = 'Desktop\fips.csv' 


# Read into Dataframe, cast to string for consistency. 
df = pd.read_csv(county_data, na_values=[' ']) 
df['FIPS'] = df['FIPS'].astype(str) 


m = folium.Map(location=[48, -102], zoom_start=3) 

m.choropleth(geo_path=county_geo, 
    data=df, 
    columns=['FIPS', 'Value'], 
    key_on='feature.properties.id', 
    fill_color='PuBu') 

Fullscreen().add_to(m) 
m 

И моя ошибка:

KeyError: Нет

Out [32]: folium.folium.Map на 0x10231748

Любой совет или пример кода/файлов, которые работают на вас на уровне графства, будут очень признательны!

EDIT:

Я нашел свою собственную ошибку.

key_on='feature.properties.id', 

Должно быть:

key_on='feature.id', 

ответ

2
import json 
keys=[k['id'] for k in json.load(open('Desktop\counties.json')['features']] 
missing_keys=set(keys)-set(plot_data['FIPS']) 
dicts=[] 
for k in missing_keys: 
    row={} 
    dicts.append({'FIPS': k, 'Value': 0}) 
dicts 
mapdata = country_data 
mapdata = mapdata.append(dicts, ignore_index=True) 

Это найти недостающие ключи в DataFrame и создавать новые строки с 0 значением. Это может решить вашу проблему с ключевыми ошибками