【Python数据科学手册】Pandas——十二、处理时间序列

十二、处理时间序列

1.Python的日期与时间工具

1)Python原生的日期使劲按工具:datetime和dateutil

datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
在这里插入图片描述
参考: Python中datetime库的用法
在这里插入图片描述

2)时间类型数组:Numpy的datetime64类型

性能相对原生工具好
在这里插入图片描述
NumPy 会自动判断输入时间需要使用的时间单位,也可使设置格式。
在这里插入图片描述

代码含义时间跨度 (相对)时间跨度 (绝对)
Y年(year)± 9.2e18 年[9.2e18 BC, 9.2e18 AD]
M月(month)± 7.6e17 年[7.6e17 BC, 7.6e17 AD]
W周(week)± 1.7e17 年[1.7e17 BC, 1.7e17 AD]
D日(day)± 2.5e16 年[2.5e16 BC, 2.5e16 AD]
h时(hour)± 1.0e15 年[1.0e15 BC, 1.0e15 AD]
m分(minute)± 1.7e13 年[1.7e13 BC, 1.7e13 AD]
s秒(second)± 2.9e12 年[ 2.9e9 BC, 2.9e9 AD]
ms毫秒(millisecond)± 2.9e9 年[ 2.9e6 BC, 2.9e6 AD]
us微秒(microsecond)± 2.9e6 年[290301 BC, 294241 AD]
ns纳秒(nanosecond)± 292 年[ 1678 AD, 2262 AD]
ps皮秒(picosecond)± 106 天[ 1969 AD, 1970 AD]
fs飞秒(femtosecond)± 2.6 小时[ 1969 AD, 1970 AD]
as原秒(attosecond)± 9.2 秒[ 1969 AD, 1970 AD]
3)pandas的日期时间工具:Timestamp 对象

Pandas 所有关于日期与时间的处理方法全部都是通过 Timestamp 对象实现的,它利用numpy.datetime64 的有效存储和向量化接口将 datetime 和 dateutil 的易用性有机结合起来。
在这里插入图片描述
注释:datetime.timedelta对象代表两个时间之间的时间差,两个date或datetime对象相减就可以返回一个timedelta对象

2.Pandas时间序列:用时间作索引

Pandas时间序列工具非常适合用来处理带时间戳的索引数据。pd.DatetimeIndex可以构建一个时间index
在这里插入图片描述
同样可以使用series取值方法
在这里插入图片描述
再次基础上还可以汇总取值
在这里插入图片描述

3.Pandas时间序列数据结构

时间戳数据:原生timestamp- numpy.datetime64 -->pandas.timestamp。对应的索引数据结构是 DatetimeIndex。
时间周期数据: numpy.datetime64 将固定频率的时间间隔进行编码–>pandas.Period。对应的索引数据结构是 PeriodIndex。
时间增量和持续时间:原生datetime.timedelta -numpy.timedelta64->pands.Timedelta。对应的索引数据结构是 TimedeltaIndex。

  1. pd.to_datetime()可以将很多日期格式解析成pandas.timestamp,任何 DatetimeIndex 类型都可以通过 to_period() 方法和一个频率代码转换成 PeriodIndex类型。
    在这里插入图片描述
    当用一个日期减去另一个日期时,返回的结果是 TimedeltaIndex 类型
    在这里插入图片描述
  2. 有规律的时间序列
    pd.date_range() 可以处理时间戳、 pd.period_range() 可以处理周期、 pd.timedelta_range() 可以处理时间间隔。
    pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, **kwargs)
    在这里插入图片描述

4.时间频率与偏移量

代码描述代码描述
D天(calendar day,按日历算,含双休日)B天(business day,仅含工作日)
W周(weekly)
M月末(month end)BM月末(business month end,仅含工作日)
Q季末(quarter end)BQ季末(business quarter end,仅含工作日)
A年末(year end)BA年末(business year end,仅含工作日)
H小时(hours)BH小时(business hours,工作时间)
T分钟(minutes)
S秒(seconds)
L毫秒(milliseonds)
U微秒(microseconds)
N纳秒(nanoseconds)
代码频率
MS月初(month start)
BMS月初(business month start,仅含工作日)
QS季初(quarter start)
BQS季初(business quarter start,仅含工作日)
AS年初(year start)
BAS年初(business year start,仅含工作日)

在频率代码后面加三位月份缩写字母来改变季、年频率的开始时间
在这里插入图片描述
所有这些频率代码都对应 Pandas 时间序列的偏移量,具体内容可以在pd.tseries.offsets模块中找到。例如from pandas.tseries.offsets import BDay,参数freq=BDay()等价与freq='B'

5.重新取样、迁移和窗口

1)重新取样与频率转换

处理时间序列数据时,经常需要按照新的频率(更高频率、更低频率)对数据进行重新取样。你可以通过 resample() 方法解决这个问题,或者用更简单的 asfreq() 方法。这两个方法的主要差异在于, resample() 方法是以数据累计(data aggregation,计算平均之类)为基础,而asfreq() 方法是以数据选择(data selection,最后一天之类)为基础。

2)时间迁移

另一种常用的时间序列操作是对数据按时间进行迁移。 Pandas 有两种解决这类问题的方法: shift() 和 tshift()。简单来说, shift() 就是迁移数据,而 tshift() 就是迁移索引。

3) 移动时间窗口

Pandas 处理时间序列数据的第 3 种操作是移动统计值(rolling statistics)。这些指标可以通过 Series 和 DataFrame 的 rolling() 属性来实现,它会返回与 groupby 操作类似的结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值