如何将透视表月份索引转换为PeriodIndex以实现时间序列分析
时间序列可视化的数据集预处理方案
没问题,我带你一步步把这个数据集处理成适合时间序列可视化的格式,全程清晰易懂:
1. 读取初始数据
首先我们从Excel中读取目标列,得到的是宽格式DataFrame,每个账户占一行,月份作为列:
import pandas as pd import numpy as np df = pd.read_excel('mypath.xlsx', usecols=['Account', 'Jan', 'Feb', 'Mar'])
初始DataFrame输出:
Account Jan Feb Mar 0 300 NaN NaN NaN 1 310 -33 -33 -33 2 320 10 5 7
2. 透视转换为时间序列结构
接下来用pivot_table把账户转成列,月份作为索引,同时把缺失值填充为0,这样的结构更贴合时间序列分析的需求:
df = df.pivot_table(df, columns=['Account'], fill_value=0)
透视后的结果:
Account 300 310 320 Feb 0 -33 5 Jan 0 -33 10 Mar 0 -33 7
3. 转换为可计算的时间索引
现在的索引是月份缩写(Jan/Feb/Mar),没法直接做时间差计算、按时间排序这类时间序列特有的操作,所以我们需要把它转换成PeriodIndex(月度周期索引),分两步完成:
3.1 先转换为DatetimeIndex
把月份缩写和指定年份(这里用2018为例)拼接,转成标准的日期时间索引:
idx = pd.to_datetime('2018-' + df.index) print(idx)
输出:
[OUT] DatetimeIndex(['2018-02-01', '2018-01-01', '2018-03-01'], dtype='datetime64[ns]', freq=None)
3.2 转换为PeriodIndex(月度周期)
把DatetimeIndex转成月度周期的索引,这样后续就能轻松进行时间相关的计算和排序了:
df.index = idx.to_period(freq='M') print(df.index)
输出:
[OUT] PeriodIndex(['2018-02', '2018-01', '2018-03'], dtype='period[M]', freq='M')
最终处理结果
处理后的DataFrame完全适合时间序列可视化和分析,索引是标准的月度周期,账户作为列:
Account 300 310 320 2018-02 0 -33 5 2018-01 0 -33 10 2018-03 0 -33 7
小提示:如果需要按时间顺序展示,只需加一行df = df.sort_index(),索引就会自动按2018-01、2018-02、2018-03的顺序排列,更符合可视化逻辑哦
内容的提问来源于stack exchange,提问作者mks
相关产品推荐
相关产品推荐

