时间序列数据是一种重要的结构化数据形式。一般有几种:
- 时间戳:timestamp,特定的时刻
- 固定时期:period,如2010年全年
- 时间间隔:interval,有起始和结束时间戳表示;
- 实验或过程时间,每个时间点都是相对于特定时间的一个变量。
pandas提供一组标准时间序列处理工具和数据算法。
1. 日期和时间数据类型及工具
datetime模块:
In [1]: from datetime import datetime
In [2]: now = datetime.now()
In [3]: now
Out[3]: datetime.datetime(2017, 2, 17, 21, 11, 17, 866138)
In [4]: now.year,now.month,now.day
Out[4]: (2017, 2, 17)
时间差:timedelta
In [5]: delta = datetime(2011,1,7) - datetime(2008,6,24,7,14)
In [6]: delta
Out[6]: datetime.timedelta(926, 60360)
In [7]: delta.days
Out[7]: 926
In [8]: delta.seconds
Out[8]: 60360
In [9]: from datetime import timedelta
In [10]: start = datetime(2008,1,6)
In [11]: start + timedelta(12) # 传入days
Out[11]: datetime.datetime(2008, 1, 18, 0, 0)
In [12]: start - 2* timedelta(12)
Out[12]: datetime.datetime(2007, 12, 13, 0, 0)
datetime模块数据类型:
1.1 字符串和datetime的相互转换
In [13]: stamp = datetime(2011,1,3)
In [14]: str(stamp) # 转换为字符串
Out[14]: '2011-01-03 00:00:00'
In [15]: stamp.strftime('%Y-%m-%d') # 格式化为字符串
Out[15]: '2011-01-03'
# 可以转换我们日常用的格式
In [20]: from dateutil.parser import parse
In [21]: parse('2017-01-03')
Out[21]: datetime.datetime(2017, 1, 3, 0, 0)
In [22]: parse('Jan 31, 2017 10:23 PM')
Out[22]: datetime.datetime(2017, 1, 31, 22, 23)
In [23]: parse('02/11/2017')
Out[23]: datetime.datetime(2017, 2, 11, 0, 0)
# pandas模块的时间转换模块
In [25]: datestrs = ['7/6/2014','2/4/2016']
In [26]: import pandas as pd
In [27]: pd.to_datetime(datestrs)
Out[27]: DatetimeIndex(['2014-07-06', '2016-02-04'], dtype='datetime64[ns]', freq=None)
In [28]: idx = pd.to_datetime(datestrs + [None])
In [29]: idx
Out[29]: DatetimeIndex(['2014-07-06', '2016-02-04', 'NaT'], dtype='datetime64[ns]', freq=None)
In [30]: idx[2]
Out[30]: NaT
In [31]: pd.isnull(idx)
Out[31]: array([False, False, True], dtype=bool)
待续。。。