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)

      

      

  • 相关阅读:
    boost::asio在VS2008下的编译错误
    Java集合框架——接口
    ACM POJ 3981 字符串替换(简单题)
    ACM HDU 1042 N!(高精度计算阶乘)
    OneTwoThree (Uva)
    ACM POJ 3979 分数加减法(水题)
    ACM HDU 4004 The Frog's Games(2011ACM大连赛区第四题)
    Hexadecimal View (2011ACM亚洲大连赛区现场赛D题)
    ACM HDU 4002 Find the maximum(2011年大连赛区网络赛第二题)
    ACM HDU 4001 To Miss Our Children Time (2011ACM大连赛区网络赛)
  • 原文地址:https://www.cnblogs.com/Cheryol/p/13463315.html
Copyright © 2011-2022 走看看