天天看點

Python資料分析--時間序列擷取目前時刻的時間指定日期和時間的格式字元串和時間格式互相轉換時間索引時間運算

時間序列

  • 擷取目前時刻的時間
    • 傳回目前時刻的日期和時間
    • 傳回目前時刻的年、月、日
    • 傳回目前時刻的周數
  • 指定日期和時間的格式
  • 字元串和時間格式互相轉換
    • 時間格式轉換為字元串格式
    • 字元串格式轉換為時間格式
  • 時間索引
  • 時間運算
    • 時間之差
    • 時間偏移

擷取目前時刻的時間

傳回目前時刻的日期和時間

from datetime import datetime
datetime.now()
           

傳回目前時刻的年、月、日

datetime.now().year
>>>
2019
In [3]:

datetime.now().month
>>>
7

datetime.now().day
>>>
23
           

傳回目前時刻的周數

# 傳回目前周幾
datetime.now().weekday()+1
>>>
2

datetime.now().isocalendar() 
>>>
(2019, 30, 2)

# 傳回周數
datetime.now().isocalendar()[1]
>>>
30
           

指定日期和時間的格式

# date()将日期和時間設定成隻展示日期
datetime.now().date()
>>>
datetime.date(2019, 7, 23)

# time()将日期和時間設定成隻展示時間
datetime.now().time()
>>>
datetime.time(23, 3, 26, 974822)

# strftime()自定義時間和日期格式
datetime.now().strftime('%Y-%m-%d')
>>>
'2019-07-23'
           

strftime()自定義格式有:

代碼 說明
%H 24小時制
%I 12小時制
%M 兩位數的分【00,59】
%S
%w 用整數表示周幾,從0開始
%U 每年的第幾周,周日是每周第一天
%W 每年的第幾周,周一是每周第一天
%F %Y-%m-%
%D %m/%d/%Y

字元串和時間格式互相轉換

時間格式轉換為字元串格式

now
>>>
datetime.datetime(2019, 7, 23, 23, 12, 4, 870619)

type(now)
>>>
datetime.datetime

type(str(now))
>>>
str
           

字元串格式轉換為時間格式

str_time = '2019-7-23'
type(str_time)
>>>
str

from dateutil.parser import parse
type(parse(str_time))
>>>
datetime.datetime
           

時間索引

  • 當索引是時間的情況
data
>>>
num
2018-01-02	1
2018-01-03	2
2018-01-05	3
2018-02-04	4
2018-02-06	5
2019-01-02	6
2019-05-02	7
2019-05-03	8

# 擷取2018年資料
data['2018']
>>>
num
2018-01-02	1
2018-01-03	2
2018-01-05	3
2018-02-04	4
2018-02-06	5

# 擷取2018年1月資料
data['2018-01']
>>>
num
2018-01-02	1
2018-01-03	2
2018-01-05	3

# 擷取2018年2月到2019年1月的資料
data['2018-02':'2019-01']
>>>
num
2018-02-04	4
2018-02-06	5
2019-01-02	6

# 擷取2018年2月4号的資料
data['2018-02-04':'2018-02-04']
Out[34]:
>>>
2018-02-04	4
           
  • 當時間是普通列的情況
df
>>>
   編号	年齡	性别	注冊時間
0	A1	54	男	2018-08-08
1	A2	16	女	2018-08-09
2	A3	47	女	2018-08-10
3	A4	41	男	2018-08-11

# 選取時間為2018年8月8日的資料
df[df['注冊時間'] == datetime(2018,8,8)]
>>>
   編号	年齡	性别	注冊時間
0	A1	54	男	2018-08-08

# 選取2018年8月9日之後的資料
df[df['注冊時間'] > datetime(2018,8,9)]
>>>
   編号	年齡	性别	注冊時間
2	A3	47	女	2018-08-10
3	A4	41	男	2018-08-11

# 選取2018年8月9日之前的資料
df[df['注冊時間'] < datetime(2018,8,9)]
>>>
   編号	年齡	性别	注冊時間
0	A1	54	男	2018-08-08

# 選取20181年8月8日到2018年8月10日之間的資料
df[(df['注冊時間'] > datetime(2018,8,8)) & (df['注冊時間'] < datetime(2018,8,10))]
>>>
   編号	年齡	性别	注冊時間
1	A2	16	女	2018-08-09
           

時間運算

時間之差

python時間做差會傳回一個timedelta,該對象中包含天數、秒、微秒三個等級

cha = datetime(2018,5,21,19,50) - datetime(2018,5,18,20,32)
cha
>>>
datetime.timedelta(days=2, seconds=83880)

# 換算成小時的時間差
cha.seconds/3600
>>>
23.3
           

時間偏移

  • timedelta隻支援天、秒、微秒的時間運算
from datetime import timedelta
date = datetime(2018,5,18,20,32)
# 往後推一天
date + timedelta(days = 1)
>>>
datetime.datetime(2018, 5, 19, 20, 32)

# 往後推60秒
date + timedelta(seconds = 60)
>>>
datetime.datetime(2018, 5, 18, 20, 33)

# 往前推一天
date - timedelta(days =1)
>>>
datetime.datetime(2018, 5, 17, 20, 32)
           
  • date offset直接實作天、小時、分鐘的時間偏移
rom pandas.tseries.offsets import Day,Hour,Minute
date = datetime(2018,5,18,20,32)
# 往後推1天
date + Day(1)
>>>
Timestamp('2018-05-19 20:32:00')

# 往後推1小時
date + Hour(1)
>>>
Timestamp('2018-05-18 21:32:00')

# 往後推10分鐘
date + Minute(10)
>>>
Timestamp('2018-05-18 20:42:00')

# 往前推30分鐘
date - Minute(30)
>>>
Timestamp('2018-05-18 20:02:00')