時間序列(time series)數據是一種重要得結構化數據形式,在多個時間點觀察或測量到得任何事物都可以形成一段時間序列,很多時間序列是固定頻率的。也就是說,數據點是根據某種規律定期出現的(比如15s、5min、1mont)。時間序列也可以是不定期的。時間序列的意義取決於具體的應用場景,主要有以下幾種:
- 時間戳(timestamp),特定的時刻
- 固定日期(period),如2007年1月或2010年全年
- 時間間隔(interval),由起始和結束時間戳表示,時期(period)可以被看作間隔(interval)的特例
- 實驗或過程時間,每個時間點都是相對於特定起始時間的一個度量
pandas提供了一組標准的時間序列處理工具和數據算法。
1.1 日期和時間數據類型及工具
python標准庫包含用於日期(date)和時間(time)數據的數據類型,以及日歷方面的功能。主要用到datetime、time以及calendar模塊。
約定:from datetime import datetime
1 >>> from datetime import datetime 2 >>> now = datetime.now() 3 >>> now 4 datetime.datetime(2020, 2, 5, 10, 58, 59, 339099) 5 >>> now.year, now.month, now.day 6 (2020, 2, 5)
datetime以毫秒形式存儲日期和時間,datetime.timedelta表示兩個datetime對象之間的時間差:
1 >>> delta = datetime(2011, 1, 7) - datetime(2011, 1, 6) 2 >>> delta.days 3 1 4 >>> delta.seconds 5 0 6 >>>
可以給datetime對象加上(或減去)一個或多個timedelta。
1 >>> from datetime import timedelta 2 >>> start = datetime(2011, 1, 7) 3 >>> start + timedelta(12) 4 datetime.datetime(2011, 1, 19, 0, 0) 5 >>> start - 2 * timedelta(12) 6 datetime.datetime(2010, 12, 14, 0, 0)
datetime模塊中的數據類型如下表所示:
類型 |
說明 |
date |
以公歷形式存儲日歷日期(年、月、日) |
time |
將時間存儲為時、分、秒、毫秒 |
datetime |
存儲日期和時間 |
timedelta |
表示兩個datetime值之間的差(日、秒、毫秒) |
1.1.1 字符串和datetime的相互轉換
利用str或strftime方法(傳入一個格式化字符串),datetime對象和pandas的Timestamp對象可以被格式化為字符串。
1 >>> stamp = datetime(2020, 2, 5) 2 >>> str(stamp) 3 '2020-02-05 00:00:00' 4 >>> stamp.strftime('%Y-%m-%d') 5 '2020-02-05'
下表是全部的格式化編碼,datatime.strptime可以用這些格式化編碼將字符串轉換為日期:
代碼 |
說明 |
%Y |
4位數的年 |
%y |
2位數的年 |
%m |
2位數的月[01, 12] |
%d |
2位數的日[01, 31] |
%H |
時(24小時制)[00, 23] |
% |
時(12小時制)[01, 12] |
%M |
2位數的分[00, 59] |
%S |
秒[00, 60](秒60和61用於閏秒) |
%w |
用整數表示的星期幾[0(星期天), 6] |
%U |
每年的第幾周[00, 53],星期天被認為是每周的第一天,每年第一個星期天之前的那幾天被認為是“第0周”。 |
%W |
每年的第幾周[00, 53],星期一被認為是每周的第一天,每年第一個星期一之前的那幾天被認為是“第0周” |
%z |
以+HHMM或-HHMM表示的UTC時區偏移量,如果時區為naïve,則返回空字符串 |
%F |
%Y-%m-%d簡寫形式,例如2012-4-18 |
%D |
%m/%d/%y簡寫形式,例如04/18/12 |
datetime對象還有一些特定於當前環境(位於不同國家或不同語言的系統)的格式化選項。如下表所示:
代碼 |
說明 |
%a |
星期幾的簡寫 |
%A |
星期幾的全稱 |
%b |
月份的簡寫 |
%B |
月份的全稱 |
%c |
完整的日期和時間,例如“Tue 01 May 2012 04:20:57 PM” |
%p |
不同環境中的AM或PM |
%x |
適合於當前環境的日期格式 |
%X |
適用於當前環境的時間格式 |