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

零基础Python用户求助:通过Python提取BLS数据至Excel并获取美国MSA历年就业数据

零基础Python用户求助:通过Python提取BLS数据至Excel并获取美国MSA历年就业数据

嗨,作为完全没接触过编程和数据科学的新手,你遇到的这种“不知道怎么精准提问AI”的情况太常见了!别着急,我给你准备了一套保姆级的Python脚本,专门用来抓取美国劳工统计局(BLS)的官方数据——这是获取MSA就业数据最权威的渠道,而且完全免费。

先理清楚我们要做的事

我们的目标是:

  • 抓取过去10年(比如2014-2023年)美国每个MSA的年底总就业人数
  • 计算每个MSA每年的新增就业岗位数(当年总就业 - 上年总就业)
  • 把所有数据整理成结构清晰的Excel文件,方便你计算就业变化率

第一步:安装必备工具

打开你的命令提示符(Windows)或终端(Mac/Linux),输入下面的命令安装需要的Python库:

pip install pandas requests openpyxl
  • pandas:帮我们整理和处理数据
  • requests:用来调用BLS的API获取数据
  • openpyxl:用来生成Excel文件

第二步:获取BLS API密钥(可选但强烈推荐)

BLS的API对无密钥请求有次数限制(每天最多25次),注册一个免费密钥可以提升到每天1000次。你只需要去BLS的开发者页面注册就能拿到,过程超简单,填个邮箱就行。

第三步:完整脚本(带详细注释)

把下面的代码复制到你的Python编辑器(比如VS Code、PyCharm,甚至自带的IDLE都行),然后根据你的需求修改几个参数:

import pandas as pd
import requests

# ---------------------- 你需要修改的参数 ----------------------
API_KEY = "你的BLS密钥"  # 没有的话可以留空,写成API_KEY = ""
TARGET_MSA_CODES = ["35620", "16980"]  # 这里替换成你需要的MSA代码,比如纽约是"35620"
START_YEAR = 2014  # 起始年份(过去10年的话就是当前年份减10)
END_YEAR = 2023    # 结束年份(一般填去年,因为当前年的数据可能不全)
OUTPUT_EXCEL_PATH = "msa就业数据.xlsx"  # 导出的Excel文件名
# -----------------------------------------------------------

# 初始化一个空的DataFrame用来存所有数据
final_data = pd.DataFrame()

# 循环处理每个MSA
for msa_code in TARGET_MSA_CODES:
    # 构造API请求参数:SMU+MSA代码+固定后缀对应总就业人数序列
    payload = {
        "seriesid": [f"SMU{msa_code}0000000000001"],
        "startyear": START_YEAR,
        "endyear": END_YEAR,
        "registrationkey": API_KEY
    }

    # 发送请求到BLS API
    response = requests.post("https://api.bls.gov/publicAPI/v2/timeseries/data/", json=payload)
    data = response.json()

    # 检查请求是否成功
    if data["status"] != "REQUEST_SUCCEEDED":
        print(f"获取MSA {msa_code} 数据失败:{data['message']}")
        continue

    # 提取就业数据和MSA名称
    series_data = data["Results"]["series"][0]["data"]
    msa_name = data["Results"]["series"][0]["seriesTitle"].split(" - ")[0]  # 从标题里提取MSA名称

    # 整理数据成DataFrame
    msa_df = pd.DataFrame(series_data)
    # 只保留年底的数据(BLS数据是月度的,我们取12月的记录)
    msa_df = msa_df[msa_df["period"] == "M12"]
    # 转换年份和就业人数为数值类型
    msa_df["year"] = msa_df["year"].astype(int)
    msa_df["total_employed"] = msa_df["value"].astype(int)

    # 计算新增就业岗位数(当年总就业 - 上年总就业)
    msa_df["new_jobs"] = msa_df["total_employed"].diff().fillna(0).astype(int)

    # 添加MSA名称和代码列,方便识别
    msa_df["msa_name"] = msa_name
    msa_df["msa_code"] = msa_code

    # 整理列的顺序,让数据更易读
    msa_df = msa_df[["msa_name", "msa_code", "year", "total_employed", "new_jobs"]]

    # 把当前MSA的数据合并到总数据里
    final_data = pd.concat([final_data, msa_df], ignore_index=True)

# 把数据导出到Excel
final_data.to_excel(OUTPUT_EXCEL_PATH, index=False, engine="openpyxl")
print(f"数据已成功导出到 {OUTPUT_EXCEL_PATH}!")

第四步:怎么获取MSA代码?

你可以在BLS的区域数据查询页面搜索你需要的MSA名称(比如"New York-Newark-Jersey City"),找到对应的5位代码——注意脚本里需要的是去掉开头"SMU"的部分,比如纽约的完整系列ID是"SMU356200000000001",那我们取中间的"35620"放到TARGET_MSA_CODES里就行。

一些实用提示

  1. 如果需要批量获取所有MSA的数据,你可以先把所有MSA的代码整理成一个列表,替换掉TARGET_MSA_CODES就行
  2. 如果你不需要某个MSA的数据,直接从列表里删掉对应的代码即可
  3. 如果请求失败,先检查你的API密钥是否正确,或者网络连接有没有问题
  4. Excel文件里的new_jobs列就是当年新增的岗位数,你可以直接用公式计算(new_jobs / 上年total_employed) * 100得到就业变化率

备注:内容来源于stack exchange,提问作者ap91phl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:15:29