如何使用 plotly.express 创建用于映射的 ID

How to Create id for Mapping with plotly.express

我有一个数据框“states”,其中包含每个州的儿童贫困率和 json 名为“us_states”的文件。我想使用 plotly express 创建一个 choropleth 地图,但我正在努力创建 id 列。这是我的全部代码。

import pandas as pd
import json
import plotly.express as px

states = pd.read_csv('https://raw.githubusercontent.com/ngpsu22/Child-Poverty-State-Map/master/poverty_rate_map.csv')

us_states = pd.read_json('https://github.com/ngpsu22/Child-Poverty-State-Map/raw/master/gz_2010_us_040_00_500k.json')

state_id_map = {}
for feature in us_states['features']:
  feature['id'] = feature['properties']['NAME']
  state_id_map[feature['properties']['STATE']] = feature['id']

states['id'] = states['state'].apply(lambda x: state_id_map[x])

但是我得到这个错误: 键错误:'Maine' 由于缅因州在我的数据框中排在第一位,这意味着出了点问题。

有什么建议吗?

  • us_states.features 是一个 dict
  • 使用 pd.json_normalizedict 提取到数据框中。
  • 'geometry.coordinates' 每一行都是一个大的嵌套列表
  • 不清楚循环应该做什么,可以使用 pd.merge.
  • 将来自两个数据帧的数据连接在一起以便于访问
us_states = pd.read_json('https://github.com/ngpsu22/Child-Poverty-State-Map/raw/master/gz_2010_us_040_00_500k.json')

# convert the dict to dataframe
us_states_features = pd.json_normalize(us_states.features, sep='_')

# the Name column is addressed with
us_states_features['properties_Name']

# join the two dataframe into one
df = pd.merge(states, us_states_features, left_on='state', right_on='properties_NAME')