通过时间戳索引选取子集
DatetimeIndex 的主要作用之一是用作Pandas对象的索引,使用它作为索引除了拥有普通索引对象的所有基本功能外,还拥有一些专门对时间序列数据操作的高级用法,比如根据日期的年份或月份获取数据,下面进行一一介绍。
创建一个时间序列类型的Series对象,示例代码如下。
In [7]: # 指定索引为多个日期字符串的列表
date_list = ['2015/05/30', '2017/02/01',
'2015.6.1', '2016.4.1',
'2017.6.1', '2018.1.23']
# 将日期字符串转换为DatetimeIndex
date_index = pd.to_datetime(date_list)
# 创建以DatetimeIndex 为索引的Series对象
date_se = pd.Series(np.arange(6), index=date_index)
date_se
Out[7]:
2015-05-30 0
2017-02-01 1
2015-06-01 2
2016-04-01 3
2017-06-01 4
2018-01-23 5
dtype: int32
最简单的选取子集的方式,是直接使用位置索引来获取具体的数据,示例代码如下。
In [8]: # 根据位置索引获取数据
time_se[3]
Out[8]: 3
还可以使用datetime构建的日期获取其对应的数据,示例代码如下。
In [9]: date_time = datetime(2015, 6, 1)
date_se[date_time]
Out[9]: 2
还可以在操作索引时,直接使用一个日期字符串(符合可以被解析的格式)进行获取,示例代码如下。
In [10]: date_se['20150530']
Out[10]:
2015-05-30 0
dtype: int32
In [11]: date_se['2016-04-01']
Out[11]:
2016-04-01 3
dtype: int32
In [12]: date_se['2018/01/23']
Out[12]:
2018-01-23 5
dtype: int32
In [13]: date_se['6/1/2017']
Out[13]:
2017-06-01 4
dtype: int32
如果希望获取某年或某个月的数据,则可以直接用指定的年份或者月份操作索引。例如,获取2015年的所有数据,示例代码如下。
In [14]: date_se['2015'] # 获取2015年的数据
Out[14]:
2015-05-30 0
2015-06-01 2
dtype: int32
除了使用索引的方式以外,还可以通过truncate()方法截取 Series或DataFrame对象,该方法的语法格式如下:
truncate(before = None,after = None,axis = None,copy = True)
部分参数含义如下:
(1) before:表示截断此索引值之前的所有行。
(2) after:表示截断此索引值之后的所有行。
(3) axis:表示截断的轴,默认为行索引方向。
例如,截取2016年1月1日之前、2016年7月31日之后的数据,示例代码分别如下。
In [15]: # 扔掉2016-1-1之前的数据
sorted_se = date_se.sort_index()
sorted_se.truncate(before='2016-1-1')
Out[15]:
2016-04-01 3
2017-02-01 1
2017-06-01 4
2018-01-23 5
dtype: int32
In [16]: # 截断2016-7-31之后的数据
sorted_se.truncate(after='2016-7-31')
Out[16]:
2015-05-30 0
2015-06-01 2
2016-04-01 3
dtype: int32