学科分类
目录
数据分析

时间序列的移动

移动(shifting)是指沿着时间轴方向将数据进行前移或后移。Pandas对象中提供了一个shift()方法,用来前移或后移数据,但数据索引保持不变。shift()方法的语法格式如下:

shift(periods=1, freq=None, axis=0)

部分参数含义如下:

(1) periods:表示移动的幅度,可以为正数,也可以为负数,默认值是1,代表移动一次。

(2) freq:如果这个参数存在,那么会按照参数值移动时间戳索引,而数据值没有发生变化。

为了让读者更好地理解,下面以Series对象为例,通过一张图来描述向前移动与向后移动发生的变化,具体如图1所示。

image-20200618154518337

图1 移动数据

在图1中,时间序列数据经过移动操作后,数据发生了变化,而时间戳索引没有发生任何变化。数据向前移动一次,位于最前面的数据被丢弃,位于末尾一行的数据因原数据向前移动变成了NaN;数据向后移动一次,位于末尾的数据被丢弃,位于开头一行的数据因原数据向后移动变为NaN。由此可见,数据由于前后移动出现了边界情况。

接下来,通过一个示例来演示如何让时间序列数据发生前移或后移,达到图7-1中展示的效果。

首先,创建一个使用DatetimeIndex作为索引的Series对象,示例代码如下。

In [28]: date_index = pd.date_range('2018/01/01', periods=5)
         time_ser = pd.Series(np.arange(5) + 1, index=date_index)
         time_ser
Out[28]: 
2018-01-01  1
2018-01-02  2
2018-01-03  3
2018-01-04  4
2018-01-05  5
Freq: D, dtype: int32

然后,调用shift()方法时传入一个正数,这表明沿着纵轴方向移动一次,示例代码如下。

In [29]: # 向后移动一次
         time_ser.shift(1)
Out[29]: 
2018-01-01  NaN
2018-01-02  1.0
2018-01-03  2.0
2018-01-04  3.0
2018-01-05  4.0
Freq: D, dtype: float64

接着,调用shift()方法时传入一个负数,这表明沿着纵轴方向反方向移动一次,示例代码如下。

In [30]: # 向前移动一次
         time_ser.shift(-1)
Out[30]: 
2018-01-01  2.0
2018-01-02  3.0
2018-01-03  4.0
2018-01-04  5.0
2018-01-05  NaN
Freq: D, dtype: float64
点击此处
隐藏目录