Plotly Express人口普查数据热图失败
我正在尝试使用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
)生成了一个比例尺,但没有地图:
不过,几何列看起来是正常的(实际上,它和其他变量返回的几何列是一样的)。我希望能得到一些帮助,理解这个问题出在哪里,以及如何解决它。
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()
那么它就能正常工作了。