如何用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
相关产品推荐
相关产品推荐

