python datetime时间差_Python学习笔记(5)— 时间序列

4095924223ccb4b1696812c5c54af8ec.png

本文是作者学习《利用Python进行数据分析》第二版,时间序列章节的学习笔记。

如果想要掌握建议过一遍代码并尝试改变代码和思考原理。

本章知识点

bcc1c00b111f83438e8004303f5a1432.png

代码

时间序列数据的 意义取决于具体的应用场景,主要有以下几种:
时间戳(timestamp),特定的时刻。
固定时期(period),如2007年1月或2010年全年。
时间间隔(interval),由起始和结束时间戳表示。时期(period)可以被看做 间隔(interval)的特例。
实验或过程时间,每个时间点都是相对于特定起始时间的一个度量。例如,从 放入烤箱时起,每秒钟饼干的直径。

from 

1、日期和时间数据类型及工具

我们主要会用到datetime、time以及calendar模块。 datetime.datetime(也可以简写为datetime)是用得最多的数据类型

now 

datetime以毫秒形式存储日期和时间。timedelta表示两个datetime对象之间的时间差

delta 

可以给datetime对象加上(或减去)一个或多个timedelta,这样会产生一个新对象

start 

7f748510894446e856672e7e461bc940.png

字符串和datetime的相互转换

利用str或strftime方法(传入一个格式化字符串),datetime对象和pandas的Timestamp对象(稍后就会介绍)可以被格式化为字符串

stamp 

93836cdce0ebd862384960c443e2f9d7.png

datetime.strptime可以用这些格式化编码将字符串转换为日期:

value 

datetime.strptime是通过已知格式进行日期解析的最佳方式。但是每次都要编写格式定义是很麻烦的事情,尤其是对于一些常见的日期格式。这种情况下,你可以用dateutil这个第三方包中的parser.parse方法(pandas中已经自动安装好了)

parse

在国际通用的格式中,日出现在月的前面很普遍,传入dayfirst=True即可解决这个 问题

parse

pandas通常是用于处理成组日期的,不管这些日期是DataFrame的轴索引还是列。 to_datetime方法可以解析多种不同的日期表示形式。对标准日期格式(如 ISO8601)的解析非常快

datestrs 

NaT(Not a Time)是pandas中时间戳数据的null值。

idx 

2、时间序列基础

pandas最基本的时间序列类型就是以时间戳(通常以Python字符串或datatime对象表示为索引的Series:

dates 

这些datetime对象实际上是被放在一个DatetimeIndex中的:

ts

跟其他Series一样,不同索引的时间序列之间的算术运算会自动按日期对齐

ts 

pandas用NumPy的datetime64数据类型以纳秒形式存储时间戳

ts

DatetimeIndex中的各个标量值是pandas的Timestamp对象

stamp 

索引、选取、子集构造

当你根据标签索引选取数据时,时间序列和其它的pandas.Series很像

stamp 

还有一种更为方便的用法:传入一个可以被解释为日期的字符串

ts

对于较长的时间序列,只需传入“年”或“年月”即可轻松选取数据的切片

longer_ts 

带有重复索引的时间序列

dates 

3、日期的范围、频率以及移动

ts

生成日期范围

index 

基本的时间序列频率

fff33848b227be2e2ee55b694f3cbfca.png

频率和日期偏移量

four_hours 

移动(超前和滞后)数据

ts 

由于单纯的移位操作不会修改索引,所以部分数据会被丢弃。因此,如果频率已 知,则可以将其传给shift以便实现对时间戳进行位移而不是对数据进行简单位移:

ts

通过偏移量对日期进行位移

now 

通过锚点偏移量的rollforward和rollback方法,可明确地将日期向前或向后“滚动”

offset 

5、时期及其算数运算

时期(period)表示的是时间区间,比如数日、数月、数季、数年等。Period类所 表示的就是这种数据类型,其构造函数需要用到一个字符串或整数,以及表11-4中的频率

p 

period_range函数可用于创建规则的时期范围

rng 

PeriodIndex类保存了一组Period,它可以在任何pandas数据结构中被用作轴索 引

pd

如果你有一个字符串数组,你也可以使用PeriodIndex类

values 

时期的频率转换

Period和PeriodIndex对象都可以通过其asfreq方法被转换成别的频率。假设我们有一个年度时期,希望将其转换为当年年初或年末的一个月度时期。该任务非常简 单:

p 

6、重采样及频率转换

重采样(resampling)指的是将时间序列从一个频率转换到另一个频率的处理过 程。将高频率数据聚合到低频率称为降采样(downsampling),而将低频率数据转 换到高频率则称为升采样(upsampling)。并不是所有的重采样都能被划分到这两 个大类中。例如,将W-WED(每周三)转换为W-FRI既不是降采样也不是升采 样。

pandas对象都带有一个resample方法,它是各种频率转换工作的主力函数。 resample有一个类似于groupby的API,调用resample可以分组数据,然后会调用 一个聚合函数

rng 

eafef352c4d8ffe2ade626b238cbaa92.png

降采样

各区间哪边是闭合的。
如何标记各个聚合面元,用区间的开头还是末尾。

rng 

e4f4e8d344457f184b1678db1d71900e.png
ts

最后,你可能希望对结果索引做一些位移,比如从右边界减去一秒以便更容易明白该时间戳到底表示的是哪个区间。只需通过loffset设置一个字符串或日期偏移量即可实现这个目的

ts

OHLC重采样

ts

222dee99e69061e770d7e64f286c5032.png

升采样和插值

frame 

假设你想要用前面的周型值填充“非星期三”。resampling的填充和插值方式跟fillna和reindex的一样

print

同样,这里也可以只填充指定的时期数

print
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值