時間序列簡介
在多個時間點觀察到或測量到的任何事物都可以形成一段時間序列(time series)
從採樣間隔上分,時間序列分爲兩種,一種是定期(等間隔),一種是不定期(非等間隔)
從時間的形式上分,時間序列主要分爲以下四種:
- 時間戳(timestamp),特定的時刻。
- 固定時期(period), 如2020年1月,2020年全年
- 時間間隔(interval),由起始和結束時間戳表示。時期(period)是一種特殊的時間間隔
- 實驗或過程時間,每個時間點都是相對於特定起始時間序列的一個度量。
pandas中的日期和時間數據類型
Python標準庫中包含日期(date)和時間(time)數據的數據類型,且還有日曆的功能。
常用的包有:datetime \ time \ calendar
1、datetime
from datetime import datetime
now = datetime.now()
print('now:', now)
print('type(now):', type(now))
print('now.year:', now.year)
print('now.month:', now.month)
print('now.day:', now.day)
輸出結果
now: 2020-06-30 14:31:26.414492
type(now): <class 'datetime.datetime'>
now.year: 2020
now.month: 6
now.day: 30
datetime.now()可以獲取當前系統時間,注意datetime是以毫秒形式存儲日期和時間,比如:datetime.datetime(2020,8,20,17,9,21,832092)
2、 datetime.timedelta
timedelta表示兩個datetime對象之間的時間差
from datetime import datetime
delta = datetime(2020, 4, 18, 2) - datetime(2020, 1, 24)
print(delta)
print(type(delta))
print(delta.days)
print(delta.seconds)
輸出結果
85 days, 2:00:00
<class 'datetime.timedelta'>
85
7200
給datetime對象加或減去一個timedelta,會產生一個新的對象:
import datetime
now = datetime.datetime.now()
print('now:', now)
pass_date = now - datetime.timedelta(10)
print('pass:', pass_date)
now: 2020-06-30 15:28:54.015684
pass: 2020-06-20 15:28:54.015684
datetime中常見的數據類型:
- date: 以公曆形式存儲日曆日期(年、月、日)
- time: 將時間存儲爲時、分、秒、毫秒
- datetime: 存儲日期和時間
- timedate: 表示兩個datetime之間的差(日、秒、毫秒)
字符串和datetime之間的轉換
- str / strftime:將datetime對象和pandas的Timestamp對象格式化爲字符串
- strptime / pd.to_datetime:將字符串轉換成datetime格式
用str將datetime對象轉換成字符串類型
import datetime
now = datetime.datetime.now()
print('now : \n{} \n{}'.format(now, type(now)))
str_now = str(now)
print('str(now) : \n{} \n{}'.format(str_now, type(str_now)))
now :
2020-06-30 16:49:23.778930
<class 'datetime.datetime'>
str(now) :
2020-06-30 16:49:23.778930
<class 'str'>
用strftime將datetime對象轉換成字符串類型
import datetime
now = datetime.datetime.now()
print('now : \n{} \n{}'.format(now, type(now)))
str_now = now.strftime('%Y-%m-%d %H:%M:%S')
print('str(now) : \n{} \n{}'.format(str_now, type(str_now)))
now :
2020-06-30 16:55:25.674629
<class 'datetime.datetime'>
str(now) :
2020-06-30 16:55:25
<class 'str'>
用strptime將字符串類型轉換成datetime對象
import datetime
value = '2020-06-18'
date_value = datetime.datetime.strptime(value, '%Y-%m-%d')
print(date_value)
2020-06-18 00:00:00
用pd.to_datetime將字符串類型轉換成datetime對象
import pandas as pd
value = '2020-06-18'
date_value = pd.to_datetime(value)
print(date_value)
2020-06-18 00:00:00
datetime的格式定義
常用的有:
%Y 4位數的年 比如:2020
%y 2位數的年
%m 2位數的月 比如:02,12
%d 2位數的日 比如:01 ,31
%H 24小時制的時 比如:00,23
%I 12小時制的時
%M 2位數的分
%S 秒
%w 星期幾
%U 每年的第幾周【00,53】星期天是每週的第一天,每年第一個星期天之前的那幾天被認爲是第0周
%W 每年的第幾周【00,53】星期一是每週的第一天,每年第一個星期一之前的那幾天被認爲是第0周
%F %Y-%m-%d簡寫形式
%D %m/%d/%y簡寫形式
擴展
針對上述中固定數據的解析格式比較麻煩的情況,使用第三方包dateutil中的parser.parse方法幾乎可以解析所有人類能夠理解的日期表示形式,但中文不行。
用法如下:
from dateutil.parser import parse
print(parse('20200618'))
print(parse('2020/06/18'))
print(parse('2020-06-18'))
2020-06-18 00:00:00
2020-06-18 00:00:00
2020-06-18 00:00:00
注意:dateutil.parser是一個實用但不完美的工具,比如說它會把字符串42認爲是2042年的今天