学科分类
目录
数据分析

通过时间戳索引选取子集

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
点击此处
隐藏目录