Plotly Express 人口普查数据分区统计失败

问题描述 投票:0回答:1

我正在尝试使用 Plotly Express 创建交互式人口普查数据分区图,我使用 censusdis 包检索这些数据。这适用于我正在检索的两个变量,但不适用于第三个。这是我的代码,它演示了这个问题:

import plotly.express as px
import censusdis.data as ced
from censusdis.datasets import ACS5

#variable = 'B19013_001E' # Works - Median Household Income
#variable = 'B25058_001E' # Works - Median Rent
variable = 'B01001_001E' # Does not work! Total Population

df = ced.download(
    dataset=ACS5,
    vintage=2022,         
    download_variables=['NAME', variable], 
    state='06',
    county='075',
    tract='*',
    with_geometry=True)

df = df.set_index('NAME')

print(df.head())

fig = px.choropleth_mapbox(df, 
                           geojson=df.geometry,
                           locations=df.index, 
                           center={'lat': 37.74180915, 'lon': -122.38474831884692}, 
                           color=variable, 
                           color_continuous_scale="Viridis", 
                           mapbox_style="carto-positron", 
                           opacity=0.5,
                           zoom=10)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()

当我循环访问变量时,生成的数据帧看起来都很相似,但第三个数据帧 (

B01001_001E
) 生成比例尺而不是地图:

但是,几何列看起来不错(事实上,看起来与其他变量返回的相同)。如果您能帮助我了解问题所在以及如何解决它,我将不胜感激。

python plotly-python choropleth
1个回答
1
投票

ced.download
的返回值中存在一些缺失值。你可以用

看到它们
print(df[df.isna().any(axis='columns')])

产生

                                                   STATE COUNTY   TRACT  B01001_001E geometry
NAME                                                                                         
Census Tract 9901; San Francisco County; Califo...    06    075  990100            0     None
Census Tract 9902; San Francisco County; Califo...    06    075  990200            0     None

如果你摆脱那些

df = df.dropna()

然后就可以正常工作了。

© www.soinside.com 2019 - 2024. All rights reserved.