You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自定义Pandas数据集与Altair内置邮编数据集结合绘图?

解决Altair自定义DataFrame与内置邮编经纬度数据结合绘图的问题

核心思路

你的自定义DataFrame缺少经纬度信息,需要先将Altair内置的邮编-经纬度数据与你的数据集按邮编匹配合并,再用合并后的完整数据绘制地图。

具体实现步骤

1. 导入依赖并获取内置邮编数据

import pandas as pd
import altair as alt

# 读取Altair内置的美国邮编经纬度数据集
zipcodes = pd.read_json(alt.data.zipcodes.url)

2. 格式对齐与数据合并

邮编列的格式必须完全一致(尤其是带前导零的美国邮编,必须用字符串类型存储,否则会丢失前导零导致匹配失败):

# 将你的数据集邮编列转为字符串
filtered_df['zip'] = filtered_df['zip'].astype(str)
# 内置数据集的zip列本身是字符串,保险起见再次确认格式
zipcodes['zip'] = zipcodes['zip'].astype(str)

# 按邮编合并,保留你的数据集所有行,匹配对应经纬度
merged_data = pd.merge(
    filtered_df,
    zipcodes[['zip', 'latitude', 'longitude']],  # 只保留需要的经纬度列
    on='zip',
    how='left'
)

3. 清理无效数据(可选)

如果部分邮编在内置数据中没有匹配到,会产生空的经纬度值,过滤掉这些行避免绘图异常:

merged_data = merged_data.dropna(subset=['latitude', 'longitude'])

4. 绘制地图

用合并后的数据集替换原示例中的内置数据源,即可生成带自定义数据的点地图:

chart = alt.Chart(merged_data).mark_circle(size=4).encode(
    longitude='longitude:Q',
    latitude='latitude:Q',
    # 可添加自定义数据的可视化编码,比如颜色、大小
    color=alt.Color('your_metric:Q', title='自定义指标'),
    tooltip=['zip:N', 'your_metric:Q']  # 鼠标悬停显示的信息
).project(
    type='albersUsa'  # 美国地图投影,非美国数据需替换为对应投影类型
).properties(
    width=800,
    height=550
)

chart.show()

关键注意事项

  • 确保两边数据集的邮编列名一致,如果你的数据集邮编列叫zipcode,合并时需指定left_on='zipcode', right_on='zip'。
  • Altair内置zipcodes仅包含美国邮编,非美国邮编需自行准备对应经纬度数据。
  • 若合并后仍无数据显示,检查邮编格式是否完全匹配(比如是否有空格、大小写差异,或部分邮编确实不在内置数据中)。

内容的提问来源于stack exchange,提问作者MrEvo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:40:04