PYTHON数据分析库-Pandas时间处理

PYTHON数据分析库-Pandas时间处理

时间对象

在 Pandas 中关于时间序列的常见对象有 6 种,分别是 Timestamp(时间戳)、DatetimeIndex(时间戳索引)、Period(时间段)、PeriodIndex(时间段索引)、以时间为元素的 Series 和以及以时间索 引的 DataFrame。

时间戳

Timestamp 时间戳表示时间轴上的某一点,以下不同代码都可以生成相同时间戳。

PYTHON数据分析库-Pandas时间处理

传入一个三元组

PYTHON数据分析库-Pandas时间处理

传入一个时间格式的字符串

PYTHON数据分析库-Pandas时间处理

传入一个时间对象

PYTHON数据分析库-Pandas时间处理

时间段

Period 时间段表示时间轴上的某一区间,以下代码都可以生成相同时间段。

PYTHON数据分析库-Pandas时间处理

时间段可以通过加减法来进行变化

PYTHON数据分析库-Pandas时间处理

Period() 函数后面通常有两个参数,第二个 freq 参数决定时间段的分割长度。

创造时间元素的Series

Pandas 中常用 to_datetime() 函数可以创建以时间为元素的 Series。

PYTHON数据分析库-Pandas时间处理

创建时间索引

利用列表或Series对象创建索引

要生成带有时间戳的索引,可以使用 DatetimeIndex() 构造函数,并传入列表或 Series 对象:

PYTHON数据分析库-Pandas时间处理

实际运用中我们经常需要大量的的时间戳的索引。可以使用 date_range() 和 bdate_range() 来批量创建相同时间间隔的时间戳索引。

创建以 2018 年 9 月 30 日为开始的 250 条时间索引,相邻索引间隔时间长度为一天。

PYTHON数据分析库-Pandas时间处理

创建以 2018 年 10 月 1 日为开始的 111 条时间索引,相邻索引间隔时间长度为一个工作日。

PYTHON数据分析库-Pandas时间处理

在 date_range() 和 bdate_range() 中可以巧妙使用 start,end, periods,freq 等参数的各种 组合轻松批量创建时间索引。

在 2017 年 10 月 1 日到 2018 年 10 月 1 日间,每隔一周创建一条索引。

PYTHON数据分析库-Pandas时间处理

对于频率的参数可参照附录中的表1

利用时间戳/时间段作为索引

同时,时间段和时间戳都可以作为索引

下面是时间戳作为索引的例子

PYTHON数据分析库-Pandas时间处理

下面是时间段作为索引的例子

PYTHON数据分析库-Pandas时间处理

时间段也可以作为索引创建DataFrame 对象。在 2017 年第一季度和 2018 年第四季度之间每隔一个季度创建一条索引。

PYTHON数据分析库-Pandas时间处理

对时间索引的DataFrame进行访问

就以前面的dataframe为例

PYTHON数据分析库-Pandas时间处理

PYTHON数据分析库-Pandas时间处理

PYTHON数据分析库-Pandas时间处理

使用 truncate() 切下 2017 年 11 月 26 日与 2018 年 4 月 29 日间的记录。

PYTHON数据分析库-Pandas时间处理

时间序列的操作

时间的平移

除了元素可以被移动,索引本身也能被移动,需要加上 freq 参数。将索引列向上移动一条:

如图所示,索引被整体移动了

PYTHON数据分析库-Pandas时间处理

重采样

重采样可以通俗得理解为改变时间索引的个数,通过增大或减小相邻索引的时间间隔以达到减小或 增加索引数量的效果,在 Pandas 中使用 resample() 函数。

重采样生成的类似GroupBy

PYTHON数据分析库-Pandas时间处理

上采样:减小时间间隔频率,增加记录的数量。

原来间隔为日的索引列,间隔被缩小成 12 小时,增加采样点的值为空值。

PYTHON数据分析库-Pandas时间处理

fill() 函数可以将新增的索引值以相邻的前一条索引值进行填充。

PYTHON数据分析库-Pandas时间处理

也可使用插值方法

PYTHON数据分析库-Pandas时间处理

下采样聚合

PYTHON数据分析库-Pandas时间处理

用agg方法可以同时使用多种求职类型

PYTHON数据分析库-Pandas时间处理

r.agg({‘A‘: [‘sum‘, ‘std‘], ‘B‘: [‘mean‘, ‘std‘]})

还有类似这种方法可供使用

时间的算数规则

首先要导入 pandas.tseries.offsets 模块,Pandas 所有常用时间类都在该模块中。

PYTHON数据分析库-Pandas时间处理

使用 DateOffset() 实现时间戳位移。

PYTHON数据分析库-Pandas时间处理

也可以用时间戳加减常用时间类以实现时间戳位移。向前移动 10 个工作日

from pandas.tseries.offsets import BDay
d - 10 * BDay()

向后移动一个月末。

from pandas.tseries.offsets import BMonthEnd
d + BMonthEnd()

个性化定制日期。虽然日历规定年末是 12 月,加入参数后相当于人为规定 2 月是年末。 向后移动到上两个年末。

from pandas.tseries.offsets import YearEnd
d + YearEnd(month=2)

向前移动到上一个周四。

from pandas.tseries.offsets import Week
d - Week(weekday=4)

可以使用 rollforward() 将指定时间向前或向后移动到一个制定常用时间类的时间戳上。将时间 移动到下一个月末:

offset = BMonthEnd()
offset.rollforward(d)

表1

PYTHON数据分析库-Pandas时间处理

PYTHON数据分析库-Pandas时间处理

上一篇:45 个非常有用的 Oracle 查询语句


下一篇:Oracle database TSPITR(TableSpace Point-In-Time Recovery) 表空间基于时间点的恢复