zoukankan      html  css  js  c++  java
  • 6-Pandas时间序列处理的基础(时序数据类型、筛选、子集提取、重复时间索引操作)

    一、Pandas中时间序列的类型  

      Pandas中最为基础的时间序列类型就是以时间戳(通过以Python字符串或datetime对象表示)为索引的Series

    >>> import pandas as pd
    >>> import numpy as np
    >>> dates = ['2020-8-1','2020-8-2','2020-8-3','2020-8-4','2020-8-5']
    >>> ts = pd.Series(np.random.randint(0,10,5))
    >>> ts.index = pd.to_datetime(dates)
    >>> ts
    2020-08-01    5
    2020-08-02    5
    2020-08-03    9
    2020-08-04    7
    2020-08-05    7
    dtype: int32

    二、Pandas中时间序列数据的筛选

      关于日期数据的筛选与python基本库中的切片方式一致;

    #选取前3条数据
    >>> ts[:3]
    2020-08-01    5
    2020-08-02    5
    2020-08-03    9
    dtype: int32
    
    #从前往后(正序),每个两个元素取数据
    >>> ts[::2]
    2020-08-01    5
    2020-08-03    9
    2020-08-05    7
    dtype: int32
    
    #从后往前(逆序),每两个元素取数据
    >>> ts[::-2]
    2020-08-05    7
    2020-08-03    9
    2020-08-01    5
    dtype: int32
    

      Pandas不同索引之间的时间序列之前的算数运算会自动按日期进行对齐(其实只是Series的特征罢了)

    >>> ts+ts[::2]
    2020-08-01    10.0
    2020-08-02     NaN
    2020-08-03    18.0
    2020-08-04     NaN
    2020-08-05    14.0
    dtype: float64
    

    三、Pandas中时间序列数据如何提取子集  

      (1)通过index[]选取子集

    >>> ts.index
    DatetimeIndex(['2020-08-01', '2020-08-02', '2020-08-03', '2020-08-04',
                   '2020-08-05'],
                  dtype='datetime64[ns]', freq=None)
    >>> len(ts.index)
    5
    >>> ts.index[2]
    Timestamp('2020-08-03 00:00:00')
    >>> ts[ts.index[2]]
    9
    

      (2)通过字符串选取子集,在这需要注意的是:传入的字符串需要能被解析成日期;

        也可以传入只包含年或年月的字符串,选取该范围内的子集;

    >>> ts['2020-8-1']
    5
    >>> ts['2020/8/1']
    5
    >>> ts['8/1/2020']
    5
    
    >>> ts['2020-8']
    2020-08-01    5
    2020-08-02    5
    2020-08-03    9
    2020-08-04    7
    2020-08-05    7
    dtype: int32
    

      (3)通过truncate方法选取子集

    truncate()常用参数有after和before,传入参数后,after之后或before之前的数据将全部被删除;

    >>> ts.truncate(after='2020-8-3')
    2020-08-01    5
    2020-08-02    5
    2020-08-03    9
    dtype: int32
    >>> ts.truncate(before='2020-8-3')
    2020-08-03    9
    2020-08-04    7
    2020-08-05    7
    dtype: int32
    

    四、带有重复索引的时间序列的操作

    在某些应用场景中,通常会存在一个时间点上有多个观测数据的情况,对于带有重复索引的时间序列,一般情况下使用如下两种方法进行操作:

    • index.is_unique检查索引日期是否唯一
    • 使用groupby()对数据进行分组聚合
    >>> dup_ts = pd.Series(np.random.randint(0,5,5))
    >>> dup_ts.index = pd.to_datetime(['2020-8-1','2020-8-2','2020-8-2','2020-8-2','2020-8-3'])
    >>> dup_ts
    2020-8-1    3
    2020-8-2    0
    2020-8-2    2
    2020-8-2    2
    2020-8-3    0
    dtype: int32
    
    >>> dup_ts['2020-8-1']
    3
    >>> dup_ts['2020-8-2']
    2020-8-2    0
    2020-8-2    2
    2020-8-2    2
    dtype: int32
    
    #查看时间序列的索引是否唯一
    >>> dup_ts.index.is_unique
    False
    
    #使用groupby进行分组聚合
    >>> dup_ts.groupby(level=0).sum()
    2020-8-1    3
    2020-8-2    4
    2020-8-3    0
    dtype: int32
    
    >>> dup_ts.groupby(level=0).count()
    2020-8-1    1
    2020-8-2    3
    2020-8-3    1
    dtype: int64
    

    五、补充  

    若有一个csv文件,在数据导入是可以通过参数实现将字符串类型的时间设为索引,设定index_col为0即以数据中第一列为索引,设定parse_datesTrue,会把索引识别为时间数据类型

    >>>data = pd.read_csv('***.csv',index_col=0,parse_dates=True)

      

      

  • 相关阅读:
    UIPath RPA 自动化脚本 机器人从入门到精通
    [转]面向物联网的21个开源软件项目
    数字化转型
    区块链项目大全-项目源码链接收藏
    SAP HANA学习资料大全 Simple Finane + Simple Logisitic [非常完善的学习资料汇总]
    今日头条技术架构分析
    巴菲特价值投资的六项法则
    文档大师 2016 :在电脑和头脑中快速找到文档的文件管理软件
    文档大师 在Win10 IE11下,文档集画面无法正常显示Word等Office文档的解决方法
    人脑+电脑:通过文档管理让个人能力大大拓展
  • 原文地址:https://www.cnblogs.com/Cheryol/p/13463315.html
Copyright © 2011-2022 走看看