2016-06-24 10 views
1

카운티 수준에서 Python으로 Choropleth 맵을 만드는 데 관심이 있습니다. 데이터를 바인드하지 않고 코드를 실행하면 카운티 라인이 아름답게 그려집니다. 그러나 내가 데이터를 바인딩하려고 할 때마다 KeyError : None을 얻습니다.Python Folium Choropleth Map KeyError : 없음

내 검색에서 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를 : 없음

아웃 [32] : folium.folium.Map 0x10231748

에서

내 코드 :(매우 실망 카운티 수준에서 귀하를 위해 일하는 조언이나 예제 코드/파일은 많은 도움이됩니다.

편집 :

나는 내 자신의 오류가 발견되었습니다.

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 값으로 새 행을 생성합니다. 키 오류 문제가 해결 될 수 있습니다.