1

我有一个数据框“states”,其中包含每个州的儿童贫困率和名为“us_states”的 json 文件。我想使用 plotly express 创建一个等值线图,但我正在努力创建 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])

但是我收到了这个错误: KeyError: 'Maine' 由于 Maine 在我的数据框中是第一个,这意味着出现了问题。

有什么建议么?

4

1 回答 1

0
  • us_states.features是一个dict
  • 用于pd.json_normalize将其提取dict到数据框中。
  • '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')
于 2020-08-03T03:15:52.473 回答