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

如何用Pandas重构BLS通胀统计DataFrame适配时间序列可视化?

Pandas重构BLS通胀数据适配时间序列可视化的最优方法

BLS通胀数据通常以宽格式存储:行代表月份,列代表年份,单元格对应当月通胀值。要适配时间序列可视化,需要将其转换为整洁(tidy)长格式——即单一列存储完整日期,另一列存储通胀数值。以下是Pandas中最符合惯用写法、最高效的实现步骤:

1. 模拟原始数据结构

假设你的DataFrame结构如下(与BLS公开数据格式一致):

import pandas as pd

df = pd.DataFrame({
    'Month': ['Jan', 'Feb', 'Mar', 'Apr'],
    2020: [2.5, 2.3, 1.5, 0.3],
    2021: [1.4, 1.7, 2.6, 4.2],
    2022: [7.5, 7.9, 8.5, 8.3]
})

2. 宽格式转长格式

使用Pandas内置的melt()方法,这是处理宽转长场景的标准工具,底层基于矢量化操作,性能高效:

# 将年份列转为变量,提取通胀值
df_melted = df.melt(
    id_vars='Month',       # 保留作为标识的月份列
    var_name='Year',      # 原年份列的名称重命名为Year
    value_name='Inflation'# 通胀数值列的名称
)

3. 生成完整日期列

将Year和Month合并为可被Pandas识别的日期类型,方便后续时间序列操作:

# 拼接年份与月份缩写,转换为datetime格式
df_melted['Date'] = pd.to_datetime(
    df_melted['Year'].astype(str) + '-' + df_melted['Month'],
    format='%Y-%b'  # %b对应月份缩写(如Jan、Feb)
)

如果你的原始数据中月份是数字(1-12),只需将格式改为%Y-%m即可。

4. 整理最终数据集

保留需要的列并按日期排序,得到标准的时间序列格式:

df_tidy = df_melted[['Date', 'Inflation']].sort_values('Date').reset_index(drop=True)

最终的整洁数据集结构如下:

Date  Inflation
0 2020-01-01        2.5
1 2020-02-01        2.3
2 2020-03-01        1.5
3 2020-04-01        0.3
4 2021-01-01        1.4
...

为什么这是最优方案

  • melt()是Pandas官方推荐的宽转长工具,代码简洁且性能远优于手动循环或自定义函数
  • 生成的整洁数据完全适配Altair、Matplotlib等可视化库的输入要求,无需额外调整即可直接绘制折线图
  • 日期列转为datetime类型后,可直接利用Pandas的时间序列功能(如按季度/年份聚合、滑动窗口计算)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:31:04