2016-06-24 11 views
1

Ich bin interessiert an der Erstellung von Choropleth Karte mit Python auf Kreisebene. Wenn ich meinen Code ausführe, ohne zu versuchen, Daten an ihn zu binden, bekomme ich die County-Zeilen schön eingezeichnet. Wenn ich jedoch versuche, meine Daten zu binden, bekomme ich KeyError: None.Python Folium Choropleth Karte KeyError: Keine

Aus meiner Suche sah es so aus, als ob dies daran liegt, dass Werte im GeoJson nicht mit den Werten in der Datendatei übereinstimmen ... aber ich ging manuell ein und überprüfte und habe die Daten bereits editiert damit es genau geht gleiche Anzahl von Zeilen und genau die gleichen Werte ... immer noch den gleichen Fehler. Sehr frustrierend :(

Mein Code:

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 

Und mein Fehler:

KeyError: Keine

Out [32]: folium.folium.Map bei 0x10231748

Jeder Ratschlag oder Beispielcode/Dateien, die für Sie auf Kreisebene arbeiten, wäre sehr willkommen!

EDIT:

Ich habe meinen eigenen Fehler gefunden.

key_on='feature.properties.id', 

Sollte sein:

key_on='feature.id', 

Antwort

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) 

Dies wird die fehlende Schlüssel in Datenrahmen und erstellen neue Zeilen mit 0 Wert finden. Dies könnte Ihr Schlüsselfehlerproblem lösen