Seite 1 von 1

Folium Choropleth Error ['NoneType' object is not subscriptable]

Verfasst: Montag 22. März 2021, 10:35
von Winflo
Hallo zusammen,

ich möchte mit Folium ein Choropleth erstellen, welches Einfärbungen bei verschiedenen deutschen Postleitzahlen vornimmt und die Farben anhand von Preisen variieren. Leider komme ich mit folgender Fehlermeldung nicht weiter und brauche Hilfe:

Code: Alles auswählen

  File "C:\Users\choropleth_germany.py", line 122, in <module>
    legend_name = 'Gesamtpreise').add_to(karte)

  File "C:\Users\Nutzer\anaconda3\lib\site-packages\folium\features.py", line 1200, in __init__
    color_data = data.set_index(columns[0])[columns[1]].to_dict()

TypeError: 'NoneType' object is not subscriptable
Folgend mein Code:

Code: Alles auswählen

import folium

#Karte mit Lokalisierung von Deutschland
karte = folium.Map(location=[51.133481, 10.018343], tiles='Stamen Terrain', zoom_start=7)

#Pfad zur .geojson-Datei
geojson_germany = "C:\\Users\\gemeinden_simplify200.geojson"

#Erstellung des Choropleth
folium.Choropleth(geo_data = geojson_germany, 
                  data = gesamtpreise,
                  colums = ['Postleitzahl', 'Gesamtpreis'],
                  key_on ='Feature.properties.destatis.zip',
                  threshold_scale = [0,500,1000,1500],
                  fill_color = 'YlOrRd',
                  fill_opacitiy = 0.5,
                  line_opacitiy = 0.2,
                  legend_name = 'Gesamtpreise').add_to(karte)

#Choropleth speichern
karte.save("gesamtpreis_choropleth.html")
Die Variable gesamtpreise beinhaltet in Spalte 0 die Postleitzahlen (als String) und in Spalte 1 die Gesamtpreise (als Float).

Bild

Folgend ein Auszug aus der .geojson für den key_on:

Code: Alles auswählen

{"type":"Feature","properties":{"ADE":6,"GF":4,"BSG":1,"RS":"010040000000","AGS":"01004000","SDV_RS":"010040000000","GEN":"Neumünster","BEZ":"Stadt","IBZ":60,"BEM":"kreisfrei","NBD":"ja","SN_L":"01","SN_R":"0","SN_K":"04","SN_V1":"00","SN_V2":"00","SN_G":"000","FK_S3":"R","NUTS":"DEF04","RS_0":"010040000000","AGS_0":"01004000","WSK":"1970/04/26","DEBKG_ID":"DEBKGDL20000E4SA","destatis":{"RS":"010040000000","area":71.66,"population":79487,"population_m":39241,"population_w":40246,"population_density":1109,"zip":"24534,"center_lon":"9,988422","center_lat":"54,069895","travel_key":"F04"", ...
Da bin ich mir unsicher, ob ich für die Postleitzahl den richtigen key_on geschrieben habe.

Ich hoffe, ihr könnt mir helfen. Wenn ihr noch Informationen benötigt, sagt gerne Bescheid.

Re: Folium Choropleth Error ['NoneType' object is not subscriptable]

Verfasst: Montag 22. März 2021, 10:55
von __blackjack__
`columns` ist an der Stelle `None`. Weil Du das nicht übergibst nehme ich an. Du übergibst `colums`. Bitte einmal genau die Buchstaben in diesen beiden Namen vergleichen. 😉

Re: Folium Choropleth Error ['NoneType' object is not subscriptable]

Verfasst: Montag 22. März 2021, 11:19
von Winflo
Danke blackjack! Da hatte sich dann wohl ein Flüchtigkeitsfehler eingeschlichen. :wink:

Kurze Frage noch zur Fehlermeldung die nun direkt im Anschluss kam:

Code: Alles auswählen

  File "C:\Users\Nutzer\anaconda3\lib\site-packages\folium\features.py", line 1243, in get_by_key
    return (obj.get(key, None) if len(key.split('.')) <= 1 else

AttributeError: 'NoneType' object has no attribute 'get'
Müssen in meinem Dataframe alle Postleitzahlen vorhanden sein, die es auch in meiner .geojson-Datei gibt? Oder färbt Folium die nicht existierenden Postleitzahl dann nur nicht ein (so möchte ich das gerne)?

Re: Folium Choropleth Error ['NoneType' object is not subscriptable]

Verfasst: Montag 22. März 2021, 14:40
von Winflo
Also der Fehler liegt bei key_on ... Ich habe gerade mehrfach verschiedenste Kombinationen ausprobiert, doch keine funktioniert.

Code: Alles auswählen

key_on = 'features.properties.zip'        #AttributeError: 'NoneType' object has no attribute 'get'
key_on = 'feature.properties.zip'                     #ValueError: key_on `'properties.zip'` not found in GeoJSON
key_on = 'feature.properties.destatis.zip'     #AttributeError: 'NoneType' object has no attribute 'get'
key_on = 'features.properties.destatis.zip'  #AttributeError: 'NoneType' object has no attribute 'get'
key_on = 'feature.properties.zip'                     #ValueError: key_on `'properties.zip'` not found in GeoJSON
key_on = 'features.properties.zip'                  #AttributeError: 'NoneType' object has no attribute 'get'
Kann mir jemand von euch helfen, wieso der key_on nicht greift?

Folgend findet ihr die .geojson-Datei als Dict:

Bild

Bild

Bild

Bild

Bild

Bild

Re: Folium Choropleth Error ['NoneType' object is not subscriptable]

Verfasst: Montag 22. März 2021, 23:24
von __blackjack__
@Winflo: Laut Dokumentation muss es mit "feature." anfangen, womit alle Varianten mit "features." schon mal raus sind.

Demnach müsste es also "feature.properties.destatis.zip" sein. Und ich vermute mal ganz stark, dass es diesen Pfad/Wert auch in jedem Feature-Wert geben muss. Und das es den Wert der da gelesen wird, auch garantiert in den Daten geben muss wo das dann als Schlüssel verwendet wird.

Wenn man im Netz nach dem Dateinamen sucht, den Du da verwendest, findet man das hier: https://gist.github.com/Tungurahua/304b ... 00-geojson

In der Datei gibt es den Wert in jedem Feature. Aber da ist auch kein Neumünster enthalten, also ist das wohl eine andere Datei.

Re: Folium Choropleth Error ['NoneType' object is not subscriptable]

Verfasst: Dienstag 23. März 2021, 14:55
von Winflo
Super, vielen Dank für die Unterstützung! Ich habe festgestellt, dass in der .geojson nicht alle Postleitzahlen aus meinem Dataframe vorhanden waren. Daraufhin habe ich eine andere verwendet und das Problem war gelöst.