我正在尝试使用 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
) 生成比例尺而不是地图:
但是,几何列看起来不错(事实上,看起来与其他变量返回的相同)。如果您能帮助我了解问题所在以及如何解决它,我将不胜感激。
在
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()
然后就可以正常工作了。