python資料分析庫-pandas時間處理
在 pandas 中關于時間序列的常見對象有 6 種,分别是 timestamp(時間戳)、datetimeindex(時間戳索引)、period(時間段)、periodindex(時間段索引)、以時間為元素的 series 和以及以時間索 引的 dataframe。
<code>timestamp</code> 時間戳表示時間軸上的某一點,以下不同代碼都可以生成相同時間戳。
傳入一個三元組
傳入一個時間格式的字元串
傳入一個時間對象
period 時間段表示時間軸上的某一區間,以下代碼都可以生成相同時間段。
時間段可以通過加減法來進行變化
period() 函數後面通常有兩個參數,第二個 freq 參數決定時間段的分割長度。
pandas 中常用 to_datetime() 函數可以建立以時間為元素的 series。
要生成帶有時間戳的索引,可以使用 datetimeindex() 構造函數,并傳入清單或 series 對象:
實際運用中我們經常需要大量的的時間戳的索引。可以使用 date_range() 和 bdate_range() 來批量建立相同時間間隔的時間戳索引。
建立以 2018 年 9 月 30 日為開始的 250 條時間索引,相鄰索引間隔時間長度為一天。
建立以 2018 年 10 月 1 日為開始的 111 條時間索引,相鄰索引間隔時間長度為一個工作日。
在 date_range() 和 bdate_range() 中可以巧妙使用 start,end, periods,freq 等參數的各種 組合輕松批量建立時間索引。
在 2017 年 10 月 1 日到 2018 年 10 月 1 日間,每隔一周建立一條索引。
對于頻率的參數可參照附錄中的表1
同時,時間段和時間戳都可以作為索引
下面是時間戳作為索引的例子
下面是時間段作為索引的例子
時間段也可以作為索引建立dataframe 對象。在 2017 年第一季度和 2018 年第四季度之間每隔一個季度建立一條索引。
就以前面的dataframe為例
使用 truncate() 切下 2017 年 11 月 26 日與 2018 年 4 月 29 日間的記錄。
除了元素可以被移動,索引本身也能被移動,需要加上 freq 參數。将索引列向上移動一條:
如圖所示,索引被整體移動了
重采樣可以通俗得了解為改變時間索引的個數,通過增大或減小相鄰索引的時間間隔以達到減小或 增加索引數量的效果,在 pandas 中使用 resample() 函數。
重采樣生成的類似groupby
上采樣:減小時間間隔頻率,增加記錄的數量。
原來間隔為日的索引列,間隔被縮小成 12 小時,增加采樣點的值為空值。
fill() 函數可以将新增的索引值以相鄰的前一條索引值進行填充。
也可使用插值方法
用agg方法可以同時使用多種求職類型
還有類似這種方法可供使用
首先要導入 pandas.tseries.offsets 子產品,pandas 所有常用時間類都在該子產品中。
使用 dateoffset() 實作時間戳位移。
也可以用時間戳加減常用時間類以實作時間戳位移。向前移動 10 個工作日
向後移動一個月末。
個性化定制日期。雖然月曆規定年末是 12 月,加入參數後相當于人為規定 2 月是年末。 向後移動到上兩個年末。
向前移動到上一個周四。
可以使用 rollforward() 将指定時間向前或向後移動到一個制定常用時間類的時間戳上。将時間 移動到下一個月末: