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

如何用SDMX从欧洲央行获取M2货币数据?代码报错求助

解决欧洲央行M2数据获取的SDMX代码问题

我需要从欧洲央行获取两组M2数据用于分析:

  • 欧元区M2:对应数据集BSI.M.U2.Y.V.M20.X.1.U2.2300.Z01.E
  • 日本M2:对应数据集RTD.M.JP.Y.M_M2.J

尝试官方文档的requests代码返回404,也试过pandaSDMX但无法运行,以下是修复后的解决方案:


修复后的Requests代码

核心问题是未指定正确的ECB SDMX服务入口,同时日期格式需匹配月度数据要求:

import requests

# ECB官方SDMX数据服务入口
entrypoint = 'https://data.ecb.europa.eu/service/data/'
resource = 'data'
flowRef = 'BSI'
# 欧元区M2的Series Key
key = 'M.U2.Y.V.M20.X.1.U2.2300.Z01.E'

parameters = {
    'startPeriod': '2010-01',  # 月度数据仅需YYYY-MM格式
    'endPeriod': '2024-07',
    'detail': 'dataonly'
}

# 拼接正确的请求URL
request_url = f"{entrypoint}{resource}/{flowRef}/{key}"
response = requests.get(request_url, params=parameters)

# 验证响应状态并处理数据
print(f"响应状态码: {response.status_code}")
# 如需解析SDMX XML格式数据,可结合pandas或SDMX专用库处理

修复后的pandaSDMX代码

确保初始化正确的数据源,并匹配数据集的维度结构:

import pandasdmx as sdmx

# 初始化ECB数据源请求
ecb = sdmx.Request('ECB')

# 获取欧元区M2数据
datamessage_ecb = ecb.data(
    resource_id='BSI',
    key='M.U2.Y.V.M20.X.1.U2.2300.Z01.E',
    params={'startPeriod': '2010-01', 'endPeriod': '2024-07'}
)

# 转换为Pandas DataFrame
df_ecb_m2 = sdmx.to_pandas(datamessage_ecb)
print("欧元区M2数据预览:\n", df_ecb_m2.head())

# 获取日本M2数据(对应RTD数据集)
datamessage_jp = ecb.data(
    resource_id='RTD',
    key='M.JP.Y.M_M2.J',
    params={'startPeriod': '2010-01', 'endPeriod': '2024-07'}
)

df_jp_m2 = sdmx.to_pandas(datamessage_jp)
print("日本M2数据预览:\n", df_jp_m2.head())

错误原因说明

  1. Requests代码404问题:
    • 未定义正确的SDMX服务入口,必须使用ECB官方提供的https://data.ecb.europa.eu/service/data/,而非数据集页面的直接URL。
    • 日期格式错误:月度数据只需YYYY-MM,精确到日会导致接口解析失败。
  2. pandaSDMX代码问题:
    • 需确保Key的层级完全匹配数据集的维度结构,上述代码已调整为符合要求的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:12:42