pandas時間序列第1課

時間序列簡介

在多個時間點觀察到或測量到的任何事物都可以形成一段時間序列(time series)

從採樣間隔上分,時間序列分爲兩種,一種是定期(等間隔),一種是不定期(非等間隔)

從時間的形式上分,時間序列主要分爲以下四種:

  1. 時間戳(timestamp),特定的時刻。
  2. 固定時期(period), 如2020年1月,2020年全年
  3. 時間間隔(interval),由起始和結束時間戳表示。時期(period)是一種特殊的時間間隔
  4. 實驗或過程時間,每個時間點都是相對於特定起始時間序列的一個度量。

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中常見的數據類型:

  1. date: 以公曆形式存儲日曆日期(年、月、日)
  2. time: 將時間存儲爲時、分、秒、毫秒
  3. datetime: 存儲日期和時間
  4. timedate: 表示兩個datetime之間的差(日、秒、毫秒)

字符串和datetime之間的轉換

  1. str / strftime:將datetime對象和pandas的Timestamp對象格式化爲字符串
  2. 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年的今天

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章