Pandas:时序数据(下)
1、时间偏移
- DateOffset 对象
DateOffset 类似于时间差 Timedelta ,但它使用日历中时间日期的规则,而不是直接进行时间性质的算术计算,让时间更符合实际生活。比如,有些地区使用夏令时时,每日偏移时间有可能是 23 或 24 小时,甚至 25 个小时。
- 移动偏移
-
应用偏移
-
偏移参数
上边我们偏移时只偏移了偏移对象的一个单位,可以传入参数支持多个单位和对象中的其他单位:
- 相关查询
当使用日期作为索引的DataFrame时,此函数可以基于日期偏移量选择最后几行:
- 与时序的计算
可以为 Series 或 DatetimeIndex 时间索引序列应用时间偏移。和其他时间序列数据一样,时间偏移后的数据一般会作为索引,运用在统计当中。
- 锚定偏移
对于某些频率,可以指定锚定后缀,让它支持在一定有时间开始或结束。比如我们可以把周频率从默认的周日调到周一 'W-MON'。
对于固定在特定频率开始或结束(monthhend、MonthBegin、WeekEnd等)的偏移,以下规则适用于向前和向后滚动:
当n不为0时,如果给定日期不在锚点上,则它会捕捉到下一个(上一个)锚点,并向前或向后移动 |n|-1 步。
'''
pd.Timestamp('2014-01-02') + pd.offsets.MonthBegin(n=1)
# Timestamp('2014-02-01 00:00:00')
pd.Timestamp('2014-01-02') + pd.offsets.MonthEnd(n=1)
# Timestamp('2014-01-31 00:00:00')
pd.Timestamp('2014-01-02') - pd.offsets.MonthBegin(n=1)
Out[238]: Timestamp('2014-01-01 00:00:00')
pd.Timestamp('2014-01-02') - pd.offsets.MonthEnd(n=1)
# Timestamp('2013-12-31 00:00:00')
pd.Timestamp('2014-01-02') + pd.offsets.MonthBegin(n=4)
# Timestamp('2014-05-01 00:00:00')
pd.Timestamp('2014-01-02') - pd.offsets.MonthBegin(n=4)
# Timestamp('2013-10-01 00:00:00')
'''
如果给定的日期在锚点上,则将其| n |移动。 指向前进或后退:
'''
pd.Timestamp('2014-01-01') + pd.offsets.MonthBegin(n=1)
# Timestamp('2014-02-01 00:00:00')
pd.Timestamp('2014-01-31') + pd.offsets.MonthEnd(n=1)
# Timestamp('2014-02-28 00:00:00')
pd.Timestamp('2014-01-01') - pd.offsets.MonthBegin(n=1)
# Timestamp('2013-12-01 00:00:00')
pd.Timestamp('2014-01-31') - pd.offsets.MonthEnd(n=1)
# Timestamp('2013-12-31 00:00:00')
pd.Timestamp('2014-01-01') + pd.offsets.MonthBegin(n=4)
# Timestamp('2014-05-01 00:00:00')
pd.Timestamp('2014-01-31') - pd.offsets.MonthBegin(n=4)
# Timestamp('2013-10-01 00:00:00')
'''
对于n = 0的情况,如果在锚点上,则日期不会移动,否则它将前滚到下一个锚点。
2、时间段
3、时间操作
- 时间重采样
Pandas 具有简单,强大和高效的功能,可在频率转换期间执行重采样操作(例如,将秒数据转换为5分钟数据)。 这在金融应用程序中非常普遍,但不仅限于此。
rng = pd.date_range('1/1/2012', periods=1000, freq='S')
ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
# 每5分钟进行一次聚合
ts.resample('5Min').sum()
'''
2012-01-01 00:00:00 74477
2012-01-01 00:05:00 74834
2012-01-01 00:10:00 76489
2012-01-01 00:15:00 25095
Freq: 5T, dtype: int64
'''
- 上采样
上采样又称图像插值,其主要目的是通过放大原图像,进而可以在更高分辨率的设备上显示。图像放大几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。
- 聚合
类似于 aggregating API, groupby API, 和窗口方法 api, Resampler 也适用相关方法。重新采样DataFrame时,默认值是对具有相同功能的所有列进行操作:
4、参考文献
《深入浅出Pandas》