Excel & Python | 炒菜計時器——時間序列 | 07
獲取當前時刻的時間
獲取當前時刻的時間就是獲取此時此刻與時間相關的資料,除了具體的年、月、日、時、分、秒,還會單獨看年、月、周、日等指標。
返回當前時刻的日期和時間
返回當前時刻的日期和時間在Excel和Python中都藉助函式now()實現。
在Excel中直接在單元格里輸入now()函式即可,在Python中則使用如下程式碼:
分別返回當前時刻的年、月、日
返回當前時刻的年份在Excel和Python中都藉助函式year實現。
在Excel的單元格中輸入如下函式:
在Python中使用如下程式碼:
返回當前時刻的月份在Excel和Python中都藉助函式month實現。
在Excel的單元格中輸入如下函式:
在Python中使用如下程式碼:
返回當前時刻的日在Excel和Python中都藉助函式day實現。
在Excel的單元格中輸入如下函式:
在Python中使用如下程式碼:
上面幾個函式在其他任意日期或時間中都適用。
返回當前時刻的週數
與當前時刻的周相關的資料有兩個,一個是當前時刻是一週的周幾,另一個是返回當前時刻所在的周在全年的第幾周。
返回周幾
返回當前時刻是周幾在Excel和Python中都藉助weekday()函式實現。
在Excel的單元格中輸入如下函式:
之所以用“now()-1”是因為Excel把週日作為一週中的第一天。
在Python中使用如下程式碼:
Python中周幾是從0開始數的,週日返回的是6,所以在後面加1。
返回週數
返回當前時刻所在周的週數在Excel中使用的是weeknum()函式,在Python中使用的isocalendar()函式。
在Python中使用如下程式碼:
指定日期和時間的格式
在Excel中要設定日期的時間格式,直接選中要設定的單元格,然後單擊滑鼠右鍵,在彈出的下拉選單中選擇設定單元格格式選項即可設定單元格格式。因為日期和時間是兩個概念,所以在Excel中設定日期和時間是分開的,如下圖所示。
在Python中,藉助date()函式將日期和時間設定成只展示日期。
藉助time()函式將日期和時間設定成只展示時間。
藉助strftime()函式可以自定義時間和日期的格式,strftime()函式是將日期和時間的格式轉化為某些自定義的格式,具體的格式有以下幾種。
用strftime()函式自定義時間和日期的格式的例子如下所示。
字串和時間格式相互轉換
字串和時間格式的相互轉換主要用於Python中。
from datetime import datetime
# str轉時間格式:
t = '2019-03-17 11:00:00'
t = datetime.strptime(t, "%Y-%m-%d %H:%M:%S")
print(t,type(t))
# 時間格式轉str:
dc = t.strftime("%Y-%m-%d %H:%M:%S")
print(dc,type(dc))
時間索引
時間索引就是根據時間來對時間格式的欄位進行資料選取的一種索引方式。
在Excel中,對於時間格式的列有專門的日期篩選,根據需要選擇相應的篩選條件即可,篩選條件如下圖所示。
在Python中,可以選取具體的某一時間對應的值,也可以選取某一段時間內的值。
新建一個時間索引的DataFrame如下:
獲取2018年的資料:
獲取2018年1月的資料:
獲取2018年1月1日到2018年1月5日的資料:
獲取2018年1月1日的資料:
上面的索引方法適用於索引是時間的情況下,但是並不是在所有情況下,時間都可以索引的,比如一個訂單表中客戶姓名是索引,成交時間就是一個普通列,這時候你先選取某一段時間內的成交訂單該怎麼辦呢?
因為時間也有大小關係的,所有我們可以利用前面學過的索引方式中的布林索引來對非索引列的時間進行選取,程式碼如下:
時間運算
兩個時間之差
在日常業務中經常會用到計算兩個時間的差,比如要計算一個使用者在某平臺上的生命週期,則使用者最後一次登入產品的時間減去使用者首次登入產品的時間即可得到。
在Excel中兩日期直接做差會得到一個帶小數點的天數,如果只想看兩日期之間差多少天,那麼直接取整數部分即可;如果想看兩日期之間差多少小時、分鐘,則需要對小數部分進行計算,小數部分乘24得到的結果中的整數部分就是小時數,它的小數部分再乘60就是分鐘數。
在Python中兩個時間做差會返回一個timedelta物件,該物件中包含天數、秒、微秒三個等級,如果要獲取小時、分鐘,則需要進行換算。
時間偏移
時間偏移是指給時間往前推或往後推一段時間,即加或減一段時間。
由於Excel中的運算單位都是天,因此若想對某一個時間具體加/減某一單位的時間,如果是加/減小時或者分鐘,則需要把小時或分鐘換算成對應的天。
在Python中實現時間偏移的方式有兩種:第一種是藉助timedelta,但是它只能偏移天、秒、微秒單位的時間;第二種是用Pandas中的日期偏移量(date offset)。
-
timedelta
由於timedelta只支援天、秒、微妙單位的時間運算,如果是其他單位的時間運算,則需要換算成以上三種單位中的一種方可進行偏移。
-
date offset
date offset可以直接實現天、小時、分鐘單位的時間偏移,不需要換算,相比timedelta要方便一些。
小結
時間序列
from datetime import datetime
返回當前時刻的日期和時間
返回當前時間 t=datetime.now()
返回年月日時分秒 t.year t.month t.day t.hour t.minute t.second
返回周幾 t.weekday()+1 周1從0開始
返回今年第幾周第幾天 t.isocalendar()
指定日期和時間的格式
只顯示日期 date()
只顯示時間 time()
格式化顯示時間 strftime()
字串和時間物件轉換
時間-》字串 strftime("格式")
字串-》時間 strptime(時間字串,"格式")
時間索引
pd.DatetimeIndex(時間物件) # 將其設定為時間索引
# 查詢2018年資料 data.loc["2018"]
# 查詢2018年1月資料 data.loc["2018-01"]
# 查詢2018年1月1日到2018年1月5日資料 data.loc["2018/01/01":"2018/01/05"]
如果時間只是普通列,那麼可以利用布林索引進行查詢
# 選取成交時間為2018年8月8日的訂單 df[df["成交時間"]==datetime(2018,8,8)]
# 選取成交時間為2018年8月9日之後的訂單 df[df["成交時間"]>datetime(2018,8,9)]
# 選取成交時間為2018年8月10日之前的訂單 df[df["成交時間"]<datetime(2018,8,10)]
# 選取成交時間為2018年8月8日到2018年8月11日之間的訂單 df[(df["成交時間"]>datetime(2018,8,8)) & (df["成交時間"]<datetime(2018,8,11))]
時間運算
兩個時間之差
時間物件運算得到 timedelta 物件
t1 = datetime.now()
t2 = datetime(1997,7,1)
tt = t1-t2 # 還可以和常數進行運算
display(tt.days,tt.seconds)
時間偏移
Python的時間偏移最多隻能按天加..
timedelta(days=..) timedelta(seconds=..)
Pandas也有時間偏移
from pd.tseries.offsets import Day,Hour,Minute
date+Day(1) date-Hour(2) date+Minute(5)