Plotly Express人口普查数据热图失败

1 投票
1 回答
46 浏览
提问于 2025-04-14 17:12

我正在尝试使用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)生成了一个比例尺,但没有地图:enter image description here

不过,几何列看起来是正常的(实际上,它和其他变量返回的几何列是一样的)。我希望能得到一些帮助,理解这个问题出在哪里,以及如何解决它。

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()

那么它就能正常工作了。

撰写回答