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)

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM