zoukankan      html  css  js  c++  java
  • 【学习】时间序列分析与处理【时间序列】

    时间戳(timestamp),特定的时刻

    固定时期(period),如2017年1月或2017年全年

    时间间隔(interval), 由起始和结束时间戳表示

    实验或过程时间,每个时间点都有相对于特定起始时间的一个度量

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

    from datetime import datetime
    
    now = datetime.now()
    
    now
    Out[63]: datetime.datetime(2017, 9, 14, 17, 19, 5, 215000)
    
    now.year, now.month, now.day
    Out[64]: (2017, 9, 14)

    datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差

    delta = datetime(2017, 9, 14) - datetime(2016, 6, 24, 8, 15)
    delta
    delta.days
    delta.seconds

    Out[66]: datetime.timedelta(446, 56700)
    delta.days
    Out[67]: 446

    delta.seconds
    Out[69]: 56700

    可以给datetime对象加上(或减去)一个或多个timedelta,这样会产生一个新对象

    from datetime import timedelta
    
    start = datetime(2017, 1, 7)
    
    start + timedelta(12)
    Out[72]: datetime.datetime(2017, 1, 19, 0, 0)
    
    start - 2 * timedelta(12)
    Out[73]: datetime.datetime(2016, 12, 14, 0, 0)

    datetime模块中的数据类型

    2、 字符串和datetime的相互转换

    利用str 或 strftime方法, datetime对象和pandas 的 timestamp对象可以被格式化字符串

    stamp = datetime(2017, 1, 3)
    
    str(stamp)
    Out[75]: '2017-01-03 00:00:00'
    
    stamp
    Out[76]: datetime.datetime(2017, 1, 3, 0, 0)
    
    stamp.strftime('%Y - %m - %d')
    Out[77]: '2017 - 01 - 03'
    
    stamp.strftime('%Y-%m-%d')
    Out[78]: '2017-01-03'
    value = '2017-09-14'
    
    datetime.strptime(value, '%Y-%m-%d')
    Out[86]: datetime.datetime(2017, 9, 14, 0, 0)
    
    datestrs = ['7/6/2017', '8/6/2017']
    
    [datetime.strptime(x, '%m/%d/%Y') for x in datestrs]
    Out[88]: [datetime.datetime(2017, 7, 6, 0, 0), datetime.datetime(2017, 8, 6, 0, 0)]

    datetime.strptime是通过已知格式进行日期解析的最佳方式。但是是件很麻烦的事情,可以用dateutil这个第三方包中的parser.parse方法

    from dateutil.parser import parse
    
    parse('2017-09-14')
    Out[90]: datetime.datetime(2017, 9, 14, 0, 0)

    dateutil可以解析几乎所有人类能够理解的日期表示形式,但中文不行

    parse('Jan 31, 2017 10:45 PM')
    Out[91]: datetime.datetime(2017, 1, 31, 22, 45)

    在国际通用的格式中,日通常出现在月的前面,传入dayfirst = True 即可解决这个问题

    parse('9/12/2017',dayfirst = True)
    Out[92]: datetime.datetime(2017, 12, 9, 0, 0)

    用pandas中 to_datetime方法可以解析多种不同的日期表示形式,对标准日期格式解析非常快

    datestrs
    Out[93]: ['7/6/2017', '8/6/2017']
    
    import pandas as pd
    
    pd.to_datetime(datestrs)
    Out[95]: DatetimeIndex(['2017-07-06', '2017-08-06'], dtype='datetime64[ns]', freq=None)

    它还可以处理缺失值(None, 空字符串)

    idx = pd.to_datetime(datestrs + [None])
    
    idx
    Out[97]: DatetimeIndex(['2017-07-06', '2017-08-06', 'NaT'], dtype='datetime64[ns]', freq=None)
    idx[2]
    Out[98]: NaT
    
    pd.isnull(idx)
    Out[99]: array([False, False,  True], dtype=bool)

    NaT(Not a Time)是pandas中时间戳数据的NA值

    注意:dateutil.parser是一个实用但不完美的工具。会把一些原本不是日期的字符串认作是日期

    datetime的格式定义

    datetime对象还有一些特定于当前环境的格式化选项

  • 相关阅读:
    Python之推导式笔记
    利用ShardingSphere-JDBC实现分库分表--配置中心的实现
    利用ShardingSphere-JDBC实现分库分表
    MGR安装记录
    学习RadonDB源码(三)
    学习RadonDB源码(二)
    学习RadonDB源码(一)
    Spring Cloud学习笔记--Spring Boot初次搭建
    一次单核CPU占用过高问题的处理
    MySQL AutoCommit带来的问题
  • 原文地址:https://www.cnblogs.com/yizhenfeng/p/7521933.html
Copyright © 2011-2022 走看看