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

如何正确将Eurostat返回的JSON文件导入pandas提取HICP通胀数据

问题诊断
  • 第一,欧盟统计局Eurostat的接口返回的JSON是特殊的多维数据集结构,不是扁平结构,直接对整个返回结果做normalize完全提取不到结构化的时序数据
  • 第二,代码存在笔误:你定义的DataFrame变量是df2,最后print的是不存在的df
  • 第三,冗余导入:同时导入了urllib和requests但只用到了urllib,属于无用导入
解决方法

Eurostat返回JSON的核心结构逻辑如下:

数据的数值和维度索引是分开存储的:

  1. dimension.geo.category.index 存储国家对应的序号:HU对应0、PL对应1、SK对应2
  2. dimension.time.category.index 存储日期对应的序号,从最早日期到最新日期依次编号
  3. value 字段存储的键是「国家序号*总日期数 + 日期序号」,值是对应的HICP数值

可直接使用如下代码提取所需结果:

import urllib.request, json
import pandas as pd

url = r"http://ec.europa.eu/eurostat/wdds/rest/data/v2.1/json/en/prc_hicp_mmor?precision=1&geo=HU&geo=PL&geo=SK&unit=RCH_M&coicop=CP00"
with urllib.request.urlopen(url) as response:
    data = json.loads(response.read().decode())

# 提取国家映射:序号->国家代码
geo_map = {v: k for k, v in data['dimension']['geo']['category']['index'].items()}
# 提取时间映射:序号->日期字符串
time_map = {v: k for k, v in data['dimension']['time']['category']['index'].items()}
# 总时间长度
time_count = len(time_map)

# 初始化结果列表
result = []
for idx, val in data['value'].items():
    idx = int(idx)
    geo_idx = idx // time_count
    time_idx = idx % time_count
    result.append({
        'date': time_map[time_idx],
        'country': geo_map[geo_idx],
        'hicp': val
    })

# 转成DataFrame,再转换为每个日期对应三国数值的宽表
df = pd.DataFrame(result)
df_wide = df.pivot(index='date', columns='country', values='hicp').reset_index()
print(df_wide)

运行后输出的df_wide每行对应一个日期,三列分别为匈牙利、波兰、斯洛伐克的同期HICP数值,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:24:01