时间序列基础
时间序列(time series)数据是一种重要的结构化数据形式。数据点是根据某种规律定期出现的(比如每15秒、每5分钟、每月出现一次)。
时间序列也可以是不定期的,没有固定的时间单位或单位之间的偏移量。时间序列数据的意义取决于具体的应用场景。
- 时间戳(timestamp),特定的时刻。
- 固定时期(period),如2007年1月或2010年全年。
- 时间间隔(interval),由起始和结束时间戳表示。时期(period)可以被看做间隔(interval)的特例。
Python标准库包含用于日期(date)和时间(time)数据的数据类型,如:datetime、time以及calendar模块。
其中,datetime以毫秒形式存储日期和时间。timedelta表示两个datetime对象之间的时间差。
datetime模块中的数据类型
字符串和datetime的相互转换
利用str或strftime方法(传入一个格式化字符串),datetime对象和pandas的Timestamp对象(稍后就会介绍)可以被格式化为字符串。
datetime.strptime可以用这些格式化编码将字符串转换为日期
datetime.strptime是通过已知格式进行日期解析的最佳方式。但是每次都要编写格式定义是很麻烦的事情,尤其是对于一些常见的日期格式。这种情况下,你可以用dateutil这个第三方包中的parser.parse方法。dateutil可以解析几乎所有人类能够理解的日期表示形式
from dateutil.parser import parse
parse('2011-01-03')
# datetime.datetime(2011, 1, 3, 0, 0)
parse('Jan 31, 1997 10:45 PM')
# datetime.datetime(1997, 1, 31, 22, 45)
parse('6/12/2011', dayfirst=True)
# datetime.datetime(2011, 12, 6, 0, 0)
pandas时间序列
pandas最基本的时间序列类型就是以时间戳(通常以Python字符串或datatime对象表示)为索引的Series。
# dates为Python字符串或datatime对象
ts = pd.Series(np.random.randn(6), index=dates)
基本的时间序列频率
pandas中的原生时间序列一般被认为是不规则的,也就是说,它们没有固定的频率。
但是,pandas有一整套标准时间序列频率以及用于重采样、频率推断、生成固定频率日期范围的工具。例如,我们可以将之前那个时间序列转换为一个具有固定频率(每日)的时间序列,只需调用resample即可
resample重采样