python 时间序列

版权声明:转载请注明出处。 https://blog.csdn.net/b285795298/article/details/81663804

时间数据基本处理方法

时间数据的意义一般有以下几种:

  • 时间戳
  • 固定时期
  • 时间间隔
    python 中处理时间的包:datetime、time、calendar

datetime以毫秒的形式储存日期和时间。
两个datetime对象之间的时间差为datetime.timedelta
datetime 加上或减去datetime.timedelta,产生新的时间对象。

In [4]: delta = datetime(2011,1,7)- datetime(2009,1,7,12,59)
In [5]: delta
Out[5]: datetime.timedelta(729, 39660)
#相隔的天数
In [6]: delta.days
Out[6]: 729
#相隔的总秒数
In [7]: delta.seconds
Out[7]: 39660
#加24天
In [10]: datetime(2011,1,7) + timedelta(24)
Out[10]: datetime.datetime(2011, 1, 31, 0, 0)
pandas.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs)

str 或者 strftime方法将datetime对象转为字符串。

In [11]: stamp = datetime(2011,1,7)
    ...: str(stamp)
    ...: 
    ...: 
Out[11]: '2011-01-07 00:00:00'
#strftime 必须传入指定的时间格式,如:%Y-%m-%d
In [12]: stamp.strftime("%Y-%m-%d")
Out[12]: '2011-01-07'

datetime.strptime()方法将字符串转为datetime日期。

#strptime同样需要指定转化的格式
In [14]: datetime.strptime('2011-01-07',"%Y-%m-%d")
Out[14]: datetime.datetime(2011, 1, 7, 0, 0)

时间序列基础

import pandas 

时间序列类型基本上是时间戳为索引的Series数据

#ts即一个时间序列数据
In [17]: dates = [datetime(2011,1,2),datetime(2011,1,5),datetime(2011,1,7),datetime(2011,1,8),datetime(2011,1,10),datetime(2011,1,12)]
    ...: ts = pd.Series(np.random.randn(6),index = dates)
    ...: 
    ...: 

In [18]: ts
Out[18]: 
2011-01-02   -0.837435
2011-01-05   -2.119598
2011-01-07    0.437290
2011-01-08   -0.194268
2011-01-10   -1.042496
2011-01-12   -1.601838
dtype: float64

不同索引的时间序列数据之间的算术运算会自动按照时间对齐,若其中某个序列无对应索引,则显示为NaN。

In [19]: ts + ts[::2]
Out[19]: 
2011-01-02   -1.674870
2011-01-05         NaN
2011-01-07    0.874579
2011-01-08         NaN
2011-01-10   -2.084992
2011-01-12         NaN
dtype: float64

传入一个可以被解释为日期的字符串,甚至只需要传入“年”或“年月”便可对数据进行切片。

In [30]: dates = pd.date_range('1/1/2000',periods=100,freq= 'W-WED')
    ...: dus = pd.Series(np.arange(100),index=dates)
    ...: dus['2000-01']
    ...: 
    ...: 
Out[30]: 
2000-01-05    0
2000-01-12    1
2000-01-19    2
2000-01-26    3
Freq: W-WED, dtype: int32

时间生成函数

date_range()该函数主要用于生成一个固定频率的时间索引,在调用构造方法时,必须指定start、end、periods中的两个参数值,否则报错。

In [31]: index = pd.date_range('8/14/2018','8/16/2018')

In [32]: index
Out[32]: DatetimeIndex(['2018-08-14', '2018-08-15', '2018-08-16'], dtype='datetime64[ns]', freq='D')

主要参数说明:
periods:时间戳的创建数量,取值为整数或None
freq日期偏移量,取值为string或DateOffset,默认为’D’(按天),其他的还有”H”(按小时),“BM”(按每月的最后一个工作日)等。参考其他的偏移量取值

In [35]: index = pd.date_range('8/14/2018 12:55:32',periods= 5, freq='5h')

In [36]: index
Out[36]: 
DatetimeIndex(['2018-08-14 12:55:32', '2018-08-14 17:55:32',
               '2018-08-14 22:55:32', '2018-08-15 03:55:32',
               '2018-08-15 08:55:32'],
              dtype='datetime64[ns]', freq='5H')

normalize:若参数为True表示将start、end参数值正则化到午夜时间戳

In [33]: index = pd.date_range('8/14/2018 12:55:32',periods= 5,normalize=True)

In [34]: index
Out[34]: 
DatetimeIndex(['2018-08-14', '2018-08-15', '2018-08-16', '2018-08-17',
               '2018-08-18'],
              dtype='datetime64[ns]', freq='D')

name:生成时间索引对象的名称,取值为string或None
closed:可以理解成在closed=None情况下返回的结果中,若closed=‘left’表示在返回的结果基础上,再取左开右闭的结果,若closed=’right’表示在返回的结果基础上,再取做闭右开的结果

WOM日期

获取每个月的固定频率。如:“获取每个月第三个星期五”之类的日期。

In [37]: index = pd.date_range('8/1/2018 ','12/1/2018', freq='WOM-3FRI')

In [38]: index
Out[38]: DatetimeIndex(['2018-08-17', '2018-09-21', '2018-10-19', '2018-11-16'], dtype='datetime64[ns]', freq='WOM-3FRI')

猜你喜欢

转载自blog.csdn.net/b285795298/article/details/81663804