将列与 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?
我很确定这个问题有一个简单的解决方案,但我已经被困了一段时间,似乎无法弄清楚。这是我到目前为止所做的:
# 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?