美文网首页
时间序列

时间序列

作者: 文嘉达_0da8 | 来源:发表于2020-07-06 20:48 被阅读0次

一、datetime模块

1.datetime构造

import datetime
date=datetime.date(2018,3,2)
date
Out[ ]:datetime.date(2018, 3, 2)
date.year
Out[ ]:2018
date.month
Out[ ]:3
time=datetime.time(9,10,34)
time
Out[ ]:datetime.time(9, 10, 34)
time.second
Out[ ]:34
time.hour
Out[ ]:9
now=datetime.datetime.now()
now
Out[ ]:datetime.datetime(2020, 7, 4, 17, 20, 12, 682627)

timedelta类数据为两个datetime类数据的差,可通过datetime类对象加或减timedelta类对象,来获取新的datetime类对象。

delta=now-datetime.datetime(2018,3,5,9,12)
delta
Out[ ]:datetime.timedelta(days=852, seconds=29720, microseconds=911440)

delta2=now+datetime.timedelta(10)
delta2
Out[ ]:datetime.datetime(2020, 7, 14, 17, 27, 20, 911440)

2.数据转换

转化为字符串

test=datetime.datetime(2018,5,12)
test
Out[ ]:datetime.datetime(2018, 5, 12, 0, 0)
str(test)
Out[ ]:'2018-05-12 00:00:00'

转化为特定格式的字符串

test.strftime('%Y/%m/%d')
Out[ ]:'2018/05/12'
test.strftime('%W')
Out[ ]:'19'

通过datetime.strptime方法可以将字符串格式转换为datetime数据类型

value='2018-4-12'
datetime.datetime.strptime(value,'%Y-%m-%d')
Out[ ]:datetime.datetime(2018, 4, 12, 0, 0)

在pandas中,可以通过to_datetime方法将一列字符串转换为时间数据

salary['HireDate']=pd.to_datetime(salary['HireDate'])

二、时间序列基础

1.时间序列构造

pandas 中的时间序列指的是以时间数据为索引的Series或DataFrame

import numpy as np
import pandas as pd
from datetime import datetime
date=[datetime(2018,4,1),datetime(2018,4,5),
      datetime(2018,4,7),datetime(2018,4,9),
      datetime(2018,4,10),datetime(2018,4,15)]
s=pd.Series(np.arange(6),index=date)
s
Out[ ]:
2018-04-01    0
2018-04-05    1
2018-04-07    2
2018-04-09    3
2018-04-10    4
2018-04-15    5
dtype: int32

2.索引与切片

s['20180415']
Out[ ]:5

s['2018/4/1']
Out[ ]:0

s['20180405':'20180411']
Out[ ]:
2018-04-05    1
2018-04-07    2
2018-04-09    3
2018-04-10    4
dtype: int32

s[datetime(2018,4,7):]
Out[ ]:
2018-04-07    2
2018-04-09    3
2018-04-10    4
2018-04-15    5
dtype: int32

对于长时间序列来说,可以通过年、月来轻松获取时间序列的切片。

date2=[datetime(2018,4,1),datetime(2018,4,5),
       datetime(2018,4,13),datetime(2018,4,27),
       datetime(2018,9,4),datetime(2018,9,8),
       datetime(2019,3,2),datetime(2019,6,17)]
s2=pd.Series(np.arange(8),index=date2)
s2
Out[ ]:
2018-04-01    0
2018-04-05    1
2018-04-13    2
2018-04-27    3
2018-09-04    4
2018-09-08    5
2019-03-02    6
2019-06-17    7
dtype: int32

s2['2018']
Out[ ]:
2018-04-01    0
2018-04-05    1
2018-04-13    2
2018-04-27    3
2018-09-04    4
2018-09-08    5
dtype: int32

s2['2018-04']
Out[ ]:
2018-04-01    0
2018-04-05    1
2018-04-13    2
2018-04-27    3
dtype: int32

三、日期

1. 日期范围

使用pd.date_range函数可以创建指定长度的DatetimeIndex索引,默认时间频率是天,通过freq参数可以使用其他频率。

index=pd.date_range('2018/4/1','2018/5/30')
index
Out[ ]:
DatetimeIndex(['2018-04-01', '2018-04-02', '2018-04-03', '2018-04-04',
               '2018-04-05', '2018-04-06', '2018-04-07', '2018-04-08',
               '2018-04-09', '2018-04-10', '2018-04-11', '2018-04-12',
               '2018-04-13', '2018-04-14', '2018-04-15', '2018-04-16',
               '2018-04-17', '2018-04-18', '2018-04-19', '2018-04-20',
               '2018-04-21', '2018-04-22', '2018-04-23', '2018-04-24',
               '2018-04-25', '2018-04-26', '2018-04-27', '2018-04-28',
               '2018-04-29', '2018-04-30', '2018-05-01', '2018-05-02',
               '2018-05-03', '2018-05-04', '2018-05-05', '2018-05-06',
               '2018-05-07', '2018-05-08', '2018-05-09', '2018-05-10',
               '2018-05-11', '2018-05-12', '2018-05-13', '2018-05-14',
               '2018-05-15', '2018-05-16', '2018-05-17', '2018-05-18',
               '2018-05-19', '2018-05-20', '2018-05-21', '2018-05-22',
               '2018-05-23', '2018-05-24', '2018-05-25', '2018-05-26',
               '2018-05-27', '2018-05-28', '2018-05-29', '2018-05-30'],
              dtype='datetime64[ns]', freq='D')

index=pd.date_range('2018/4/1','2018/12/31',freq='M')
index
Out[ ]:
DatetimeIndex(['2018-04-30', '2018-05-31', '2018-06-30', '2018-07-31',
               '2018-08-31', '2018-09-30', '2018-10-31', '2018-11-30',
               '2018-12-31'],
              dtype='datetime64[ns]', freq='M')

在pd.date_range函数中传入起始或结束日期,再用period参数传入一个表示一段时间的数据,就可以创建指定长度的DatetimeIndex索引。

pd.date_range(start='2018/4/1',periods=20)
Out[ ]:
DatetimeIndex(['2018-04-01', '2018-04-02', '2018-04-03', '2018-04-04',
               '2018-04-05', '2018-04-06', '2018-04-07', '2018-04-08',
               '2018-04-09', '2018-04-10', '2018-04-11', '2018-04-12',
               '2018-04-13', '2018-04-14', '2018-04-15', '2018-04-16',
               '2018-04-17', '2018-04-18', '2018-04-19', '2018-04-20'],
              dtype='datetime64[ns]', freq='D')
pd.date_range(end='2018/4/1',periods=20)
Out[ ]:
DatetimeIndex(['2018-03-13', '2018-03-14', '2018-03-15', '2018-03-16',
               '2018-03-17', '2018-03-18', '2018-03-19', '2018-03-20',
               '2018-03-21', '2018-03-22', '2018-03-23', '2018-03-24',
               '2018-03-25', '2018-03-26', '2018-03-27', '2018-03-28',
               '2018-03-29', '2018-03-30', '2018-03-31', '2018-04-01'],
              dtype='datetime64[ns]', freq='D')

2. 频率与移动

  • 时间序列的常用基础频率
    D:每日历日
    B:每工作日
    H:每小时
    T或者min:每分钟
    S:每秒
pd.date_range(start='2018/4/1',periods=20,freq='2H20min38S')
Out[ ]:
DatetimeIndex(['2018-04-01 00:00:00', '2018-04-01 02:20:38',
               '2018-04-01 04:41:16', '2018-04-01 07:01:54',
               '2018-04-01 09:22:32', '2018-04-01 11:43:10',
               '2018-04-01 14:03:48', '2018-04-01 16:24:26',
               '2018-04-01 18:45:04', '2018-04-01 21:05:42',
               '2018-04-01 23:26:20', '2018-04-02 01:46:58',
               '2018-04-02 04:07:36', '2018-04-02 06:28:14',
               '2018-04-02 08:48:52', '2018-04-02 11:09:30',
               '2018-04-02 13:30:08', '2018-04-02 15:50:46',
               '2018-04-02 18:11:24', '2018-04-02 20:32:02'],
              dtype='datetime64[ns]', freq='8438S')
  • 移动数据是沿着时间索引将数据向前移或者向后移,通过用shift方法可以完成移动数据操作。
date4=pd.date_range('2018/4/1',periods=5)
s=pd.Series(np.arange(5),index=date4)
s
Out[ ]:
2018-04-01    0
2018-04-02    1
2018-04-03    2
2018-04-04    3
2018-04-05    4
Freq: D, dtype: int32
s.shift(2)
Out[ ]:
2018-04-01    NaN
2018-04-02    NaN
2018-04-03    0.0
2018-04-04    1.0
2018-04-05    2.0
Freq: D, dtype: float64
s.shift(-2)
Out[ ]:
2018-04-01    2.0
2018-04-02    3.0
2018-04-03    4.0
2018-04-04    NaN
2018-04-05    NaN
Freq: D, dtype: float64

如果再shift方法中传入频率参数freq,就是修改索引了。

s.shift(2,freq='D')
Out[ ]:
2018-04-03    0
2018-04-04    1
2018-04-05    2
2018-04-06    3
2018-04-07    4
Freq: D, dtype: int32

四、时期

1. 时期基础

Peries可以创建时期数据类型,传入字符串或者整数、频率即可。

p=pd.Period(2018,'A-DEC')
p
Out[ ]:
Period('2018', 'A-DEC')
p+2
Out[ ]:
Period('2020', 'A-DEC')

类似于pd.date_range,pd.period_range函数可以创建时期范围,PeriodIndex索引同样可以构造Series或者DataFrame。

date5=pd.period_range('2018/4/1','2018/10/5',freq='M')
date5
Out[ ]:
PeriodIndex(['2018-04', '2018-05', '2018-06', '2018-07', '2018-08', '2018-09',
             '2018-10'],
            dtype='period[M]', freq='M')

2. 频率转换

Period和PeriodIndex对象可以通过asfreq方法转换频率,如将年度转换为月度。

p=pd.Period(2018,freq='A-DEC')
p
Out[ ]:
Period('2018', 'A-DEC')

p.asfreq('M',how='start')
Out[ ]:
Period('2018-01', 'M')
date6=pd.period_range('2014','2018',freq='A-DEC')
date6
Out[ ]:
PeriodIndex(['2014', '2015', '2016', '2017', '2018'], dtype='period[A-DEC]', freq='A-DEC')

ps=pd.Series(np.arange(5),index=date6)
ps
Out[ ]:
2014    0
2015    1
2016    2
2017    3
2018    4
Freq: A-DEC, dtype: int32

利用to_period方法可以将由时间戳索引的时间序列数据转换为以时期为索引,通过to_timestamp方法可以进行逆操作。

date7=pd.date_range('2018/4/1',periods=4,freq='M')
s=pd.Series(np.arange(4),index=date7)
s
Out[ ]:
2018-04-30    0
2018-05-31    1
2018-06-30    2
2018-07-31    3
Freq: M, dtype: int32

ps=s.to_period()
ps
Out[ ]:
2018-04    0
2018-05    1
2018-06    2
2018-07    3
Freq: M, dtype: int32

五、频率转换与重采样

1. 重采样

pd.resample用于各种频率的转换工作,如将间隔为‘天’的频率聚合转换为‘月度’的频率。

date=pd.date_range('2018/4/1',periods=100,freq='D')
s=pd.Series(np.arange(100),index=date)
s.head(10)
Out[ ]:
2018-04-01    0
2018-04-02    1
2018-04-03    2
2018-04-04    3
2018-04-05    4
2018-04-06    5
2018-04-07    6
2018-04-08    7
2018-04-09    8
2018-04-10    9
Freq: D, dtype: int32

s.resample('M').mean()
Out[ ]:
2018-04-30    14.5
2018-05-31    45.0
2018-06-30    75.5
2018-07-31    95.0
Freq: M, dtype: float64

相关文章

  • 时间序列

    在多个时间点观察或测量到的任何事物都可以形成一段时间序列。 时间戳(timestamp):特定的时刻。 固定时期(...

  • 时间序列

    https://zhidao.baidu.com/question/1495823064595097579.html

  • 时间序列

    python时间序列分析时间序列完全教程(R)http://blog.csdn.net/Earl211/artic...

  • 时间序列

    生成标准格式 reference:http://www.ncl.ucar.edu/Document/Functio...

  • 时间序列

    时间序列基础参考 1、数据介绍 再介绍本篇的内容之前,我们先来看一下本文用到的数据。本文用到的中国银行股票数据下载...

  • 时间序列

    时区表示 时区转换 时间跨度转换 时期和时间戳之间的转换

  • 时间序列

    一、datetime模块 1.datetime构造 timedelta类数据为两个datetime类数据的差,可通...

  • 时间序列

    参考博客python实现时间序列分析-ning-ML 时间序列的测试 平稳性检验 时序图检验 该序列具有明显的趋势...

  • 时间序列

    时间序列,又叫动态数列,是将某一统计指标在各个不同时间上的数值按时间先后顺序编制形成的序列。这里有两个基本因素:被...

  • 时间序列

    t = datetime(2019,07,29,0,0,0):1/24:datetime(2020,11,1,23...

网友评论

      本文标题:时间序列

      本文链接:https://www.haomeiwen.com/subject/qzgofktx.html