2021-08-14

pandas时间系列

1.时间序列前言

时间序列数据在很多领域都是重要的结构化数据形式,比如:金融,神经科学,生态学,物理学。在多个时间点观测的数据形成了时间序列。时间序列可以是固定频率的,也可以是不规则的。

常见使用
  • 时间戳
  • 固定的时间区间
  • 时间间隔

2.时间序列基础

  • 时间序列介绍
    Pandas中的基础时间序列种类是由时间戳索引的Series,在Pandas外部通常表示为Python字符串或datetime对象。

2.1. Python内置时间模块

import time

2.1.1 时间戳

  • 给机器看懂
  • 1970年1月1日0时0分0秒到现在时间偏移量
  • time.time()


    image.png

2.1.2 结构化时间

  • t = time.localtime(time.time()) # 本地时间
  • t
  • time.gmtime(time.time()) # 0 时区


    image.png
  • 操作时间 localtime和gmtime基本相同,只是一个是北京时间,一个是国际时间(个人理解)

2.1.3 属性

  • t.tm_year


    image.png

2.1.4 格式化时间字符串

  • 给人类看懂
    time.strftime("%Y/%m/%d %H:%M:%S",t)
  • 给机器看懂
    time.strptime('2021/08/12 23:18:33',"%Y/%m/%d %H:%M:%S")
    image.png

2.1.5 时间戳格式化为固定的格式

其实就是把秒转换成固定的格式

  • time.ctime(time.time())
  • time.ctime(1628781513.0)


    image.png

2.1.6 结构化时间转回时间戳

  • time.mktime(t)


    image.png

2.2. 日期模块 日期和实际数据类型

  • from datetime import datetime

2.2.1 获取当前日期时间

  • now = datetime.now()
  • now


    image.png

2.2.2 获取属性方法

  • now.year,now.month,now.day


    image.png

2.2.3 时间间隔

  • 时间差timedelta(1, 68400)默认是天和秒
    d = datetime(2021,12,12,20,0,0) - datetime(2021,12,11,1,0,0)
    d


    image.png
  • from datetime import timedelta


    image.png

2.3. datetime和字符串相互转换

  • stamp = datetime(2021,8,12)
  • stamp


    image.png

2.3.1 datetime强制转换为字符串

  • str(stamp)


    image.png

2.3.2 datetime格式化转换为字符串

  • stamp.strftime("%Y-%m-%d %H:%M:%S")
  • stamp.strftime('%y/%m/%d')


    image.png

2.3.3 字符串转换为datetime

  • 注意:%Y一定为大写才行
  • 一个转换
    datetime.strptime('2021-8-13','%Y-%m-%d')
  • 列表转换
    d = ['12/12/2021','1/1/2021']
    [datetime.strptime(i,"%m/%d/%Y") for i in d]


    image.png

2.3.4 补充 把不同的时间形式都转换成datetime形式

  • 导入这个模块即可
    from dateutil.parser import parse
  • 列子:2021年8月13日不同形式的字符串,导入这个模块后都可以转换成datetime形式
    parse('8/13/2021')
    parse('2021.8.13')
    parse('2021 8 13')
    parse('2021-8-13')


    image.png

2.3.5 补充 转换成时间索引

  • pd.to_datetime(d)


    image.png

3. 时间系列操作

image.png

3.1 索引操作

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

3.2 带有重复索引时间序列

image.png

3.3 日期范围 频率 移动

3.3.1 生成日期范围

  • index = pd.date_range('2021-01-01','2021-03-01') # 日期起 止 默认频是天
  • index


    image.png
  • pd.date_range('2021-01-01',periods=100) #日期起 条数


    image.png
  • pd.date_range(end='2021-01-11',periods=100) #日期点之前100条


    image.png

3.3.2 频率

  • pd.date_range('2021-08-01','2021-08-12',freq='3s')


    image.png

3.3.3 移动数据

  • ts.shift(2)# 下移两位
  • ts.shift(-2)# 上移两位


    image.png

3.3.4 重采样

  • 重采样:指得是时间序列从一个频率转换为另一个频率进行处理的过程
    从高频转换到低频 --> 降采样
    从低频转换到高频 --> 升采样
image.png
  • t.resample('M').sum()# 求各月的和

  • t.resample('10D').sum()# 求10天的和


    image.png
  • 升采样


    image.png

    image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容