版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
因为TimeSeries是Series的一个子类,所以在数据选取方面与Series是一样的。
创建一个时间序列ts用来举例:
from pandas import Series
from numpy import random
from datetime import datetime
import numpy as np
import pandas as pd
dates = [datetime(2011,1,2),datetime(2011,1,5),datetime(2011,1,7),datetime(2011,1,8),datetime(2011,1,9),datetime(2011,1,10)]
ts = Series(np.random.randn(6),index = dates)
print(ts)
1.通过索引选取,可以给索引创建一个变量,也可以直接用索引取
In:stamp = ts.index[2]
print(ts[stamp])
print(ts[ts.index[2]])
print(ts[2])
2.传入一个可以被解释为日期的字符串
In:print(ts['20110102'])
print(ts['1/2/2011'])
print(ts['2011-01-02'])
如果我们用的是一段较长的时间序列,可能我们需要取某一段时间的数据,这就需要对时间序列选取某段时间的数据切片。
先创建一个较长的时间序列longer_tp用来举例:
In:longer_tp = Series(np.random.randn(1000),index = pd.date_range('1/1/2011',periods=1000))
print(longer_tp)
1.选取“年”或者“年月”的数据切片
In:print(longer_tp['2011'])
print(longer_tp['2011-05'])
2.选取某个日期之后的数据切片
In:print(longer_tp[datetime(2011,1,2):])
3.选取某段时间的数据切片,也可以用不存在于该时间序列的时间戳对其进行切片。输入的日期可以为datetime、timestamp或字符串日期。
In:print(longer_tp[datetime(2011,1,2):datetime(2011,2,2)])
print(longer_tp[datetime(2010,12,1):datetime(2011,1,10)])
print(longer_tp['2011-01-01 00:00:00':'2011-02-01 00:00:00'])
print(longer_tp['20110101':'20110201'])
4.还有一种是用truncate方法
In:print(longer_tp.truncate(after = '1/9/2011'))
在某些应用场景中,可能会存在一个时间点有多个观测数据的情况,这时我们用时间点选取数据时,该时间点有几个观测数据,就会输出几个观测数据。
创建一个重复时间序列dup_ts用来举例:
In:dates = pd.DatetimeIndex(['1/1/2011','1/2/2011','1/2/2011','1/2/2011','1/3/2011'])
dup_ts = Series(np.random.randn(5),index = dates)
print(dup_ts)
可以用过检查索引的is_unique属性检查时间序列是否唯一,若唯一则输出True,不唯一输出False。
In:print(dup_ts.index.is_unique)
1.选取不重复的时间点
In:print(dup_ts[datetime(2011,1,3)])
2.选取重复的时间点
In:print(dup_ts[datetime(2011,1,2)])