Pandas时间序列基础(转换,索引,切片)

时间序列的类型:

时间戳:具体的时刻
固定的时间区间:例如2007年的1月或整个2010年
时间间隔:由开始时间和结束时间表示,时间区间可以被认为是间隔的特殊情况
实验时间和消耗时间:每个时间是相对于特定开始时间的时间的量度,(例如自从被放置在烤箱中每秒烘烤的饼干的直径)

日期和时间数据的类型及工具

datetime模块中的类型:

date                  使用公历日历存储日历日期(年,月,日) 
time                  将时间存储为小时,分钟,秒,微秒
datetime              存储日期和时间
timedelta             表示两个datetime值之间的差(如日,秒,微秒)
tzinfo                用于存储时区信息的基本类型

from datetime import datetime
now = datetime.now()
now.year           #当时年份
now.month          #当前月份
now.day            #当前天
now.time()         #当前时间
datetime.time(12, 27, 41, 303676)

两个时间戳运算得到一个timedelta(时间差)类型

日期时间差 timedelta类型

from datetime import timedelta

start = datetime(2019,2,5)
start + timedelta(20)          #默认为天
datetime.datetime(2019, 2, 25, 0, 0)

字符串和datetime互相转换

date.strptime方法将字符串转换为时间

values = '2019-8-9'
datetime.strptime(values,'%Y-%m-%d')           #是在已知格式的前提下转换日期的好方式
datetime.datetime(2019, 8, 9, 0, 0)

datestrs = ['2019-8-7','2019-8-9']
[datetime.strptime(values,'%Y-%m-%d') for values in datestrs]
[datetime.datetime(2019, 8, 7, 0, 0), datetime.datetime(2019, 8, 9, 0, 0)]

更为通用的日期转换格式

from dateutil.parser import parse
parse(values)
datetime.datetime(2019, 8, 9, 0, 0)
parse('8,5,2018',dayfirst=True)       #dayfirst参数 第一个元素是天
datetime.datetime(2018, 5, 8, 0, 0)

pd.to_datetime() 用于轴索引或DataFrame的列

pd.to_datetime(datestrs)
DatetimeIndex(['2019-08-07', '2019-08-09'], dtype='datetime64[ns]', freq=None)

更为简单的转换
datetime(2019,1,1)
datetime.datetime(2019, 1, 1, 0, 0)

时间序列的算术运算(在日期上自动对齐)

index = pd.date_range('3/3/2018',periods=20)
ts = pd.Series(np.random.randn(20),index=index)
ts
2018-03-03    0.611591
2018-03-04    0.119168
2018-03-05    0.514390
2018-03-06    1.010600
2018-03-07    0.181763
2018-03-08   -0.290964
2018-03-09    0.252927
2018-03-10   -1.645692
2018-03-11   -0.500014
2018-03-12   -1.247355​

ts1 = ts[::2]
2018-03-03    0.611591
2018-03-05    0.514390
2018-03-07    0.181763
2018-03-09    0.252927
2018-03-11   -0.500014
2018-03-13   -0.122307
2018-03-15    0.361237
2018-03-17   -1.894853
2018-03-19   -1.608989
2018-03-21    1.274982
Freq: 2D, dtype: float64

ts + ts1
2018-03-03    1.223183
2018-03-04         NaN
2018-03-05    1.028781
2018-03-06         NaN
2018-03-07    0.363526
2018-03-08         NaN
2018-03-09    0.505853
2018-03-10         NaN
2018-03-11   -1.000028
2018-03-12         NaN
2018-03-13   -0.244613
2018-03-14         NaN
2018-03-15    0.722473
2018-03-16         NaN
2018-03-17   -3.789707
2018-03-18         NaN
2018-03-19   -3.217979
2018-03-20         NaN
2018-03-21    2.549963
2018-03-22         NaN

ts.index.dtype                #数据;类型在纳秒级的分辨率下存储时间戳
dtype('

时间序列的索引,选择,子集

时间序列的索引

ts = pd.Series(np.random.randn(1000),index = pd.date_range('1/1/2016',periods=1000))

s['2018-6']       #时间序列的索引        也可用ts.loc[]
2018-06-01    1.371843
2018-06-02   -0.356041
2018-06-03    0.111452
2018-06-04    0.325222
2018-06-05   -0.863138
2018-06-06   -0.115909
2018-06-07    0.062894
2018-06-08    0.223712

时间序列的切片

ts['2018-9-23':]         #时间序列的切片
2018-09-23    0.005519
2018-09-24   -1.374038
2018-09-25    1.769112
2018-09-26   -0.000306
Freq: D, dtype: float64

ts.truncate(before='2018-9-24')             #使用truncate方法向后切片
2018-09-24   -1.374038
2018-09-25    1.769112
2018-09-26   -0.000306
Freq: D, dtype: float64

ts.truncate(after='2016-1-4')           #向前切片
2016-01-01   -1.776334
2016-01-02   -0.488550
2016-01-03   -1.299889
2016-01-04   -1.883413
Freq: D, dtype: float64

含有重复索引的时间序列的分组处理

index = pd.DatetimeIndex(['1/1/2017','1/1/2017','1/2/2017','1/3/2017'])
dup_ta = pd.Series(np.arange(4),index=index)
dup_ta
2017-01-01    0
2017-01-01    1
2017-01-02    2
2017-01-03    3
dtype: int32

dup_ta.groupby(level=0).mean()

你可能感兴趣的:(Pandas,Pandas时间序列基础)