将列与 Geojson 文件匹配

Matching Columns to Geojson File

我很确定这个问题有一个简单的解决方案,但我已经被困了一段时间,似乎无法弄清楚。这是我到目前为止所做的:

# import libraries
import folium
import pandas as pd
import numpy as np
import json

# import data
cases = pd.read_csv('COVID-19_Cases__Tests__and_Deaths_by_ZIP_Code.csv')

然后我重命名我需要匹配 Geojson 文件的列:

cases.rename(columns = {'ZIP Code':'ZIP'}, inplace = True) 

因为数据是按周列出的,而我只需要最多 up-to-date 个数字,所以我按邮政编码排序以获得我正在寻找的最大值:

cases_sorted = cases.groupby('ZIP')
maximums = cases_sorted.max()

到目前为止一切顺利。我删除了一些不必要的行:

maximums_cleaning = maximums.drop('60666',axis = 0)
maximums_cleaned = maximums_cleaning.drop('Unknown',axis = 0)

我的数据框如下所示: Dataframe

然后我加载一张地图:

import folium
map = folium.Map(location=[41.8781, -87.6298], default_zoom_start=15)
map

将列更改为字符串类型:

maximums_cleaned['ZIP']=maximums_cleaned['ZIP'].astype(str)

然后我得到这个错误:

按键错误:'ZIP'

然后加载我的 GeoJson 文件以在其上分层:

    # load GeoJson
map.choropleth(geo_data="Boundaries - ZIP Codes.geojson",
             data=maximums_cleaned, # my dataset
             columns=['ZIP', 'Case Rate - Cumulative'], # zip code is here for matching the geojson zipcode, sales price is the column that changes the color of zipcode areas
             key_on='feature.properties.postalCode', 
             fill_color='BuPu', fill_opacity=0.7, line_opacity=0.2,
             legend_name='Cases')

我再次收到此错误:KeyError:“[None of ['ZIP'] are in the columns”

我在没有转换为字符串的情况下尝试了代码,并在加载我的 GeoJson 文件时收到了相同的错误代码。我也尝试过按不同的列分组但没有成功。我认为问题在于“Zip”列是第一列,它的 header 低于其他列。我认为这可能需要解决 GeoJson 文件才能使用数据框,但我不知道如何修复它。感谢您的意见,谢谢!

当您按 'ZIP' 分组时,它会转换为数据框的索引,而索引不是列,您在那里感到困惑。

一个可行的解决方案是将索引复制到列:

How to convert index of a pandas dataframe into a column?