傻傻分不清楚系列 | Python中各種時間處理方法(下)

​     上一篇文章中,我們理清楚了time庫以及datetime庫中各種時間對象的處理方法,以及相互之間的轉化方法。

       我們發現,time庫以及datetime庫中,確實存在名字相同,但是調用方法與所屬類完全不一樣的情況,這也是造成使用過程中各種混淆的原因。

       今天我們把Pandas庫中處理時間的各種函數與方法也加進來討論,當然,由於Pandas中處理時間的方法和類太多太強大,我們僅僅是對其中探討Pandas其中部分,特別是其中與time庫、datetime庫有關聯且又容易混淆的相關知識。

(一)    此Timestamp非彼Timestamp

相信在讀過前面一篇文章的同學,對time庫中的unix時間戳還有印象,但是Pandas中的Timestamp對象和unix時間戳格式完全不同。

Pandas中的Timestamp對象可以說是Pandas中時間序列對象的“細胞”,如果我們有datetime64[ns]型Series對象如下:

 

 

       你會發現當你提取Series第一個元素出來,返回來的就是一個Timestamp對象。當然,我們也可以自己創建一個Timestamp對象:

 

 

      從上面的代碼你會發現,你可以將unix時間戳、字符串型日期、datetime庫中datetime.datetime通過pd.Timestamp()方法直接轉化爲Timestamp對象。

       反過來呢?如果想將把Timestamp對象轉化爲unix時間戳,可以使用pd.Timestamp.timestamp()方法:

 

 

(二)    生成時間序列

Pandas作爲處理多維數組的“神器”,本篇文章講的當然是處理時間序列的方法。其中,Pandas中生成時間序列的方法不少,最常用的方法是pd.date_range(),我們看一下其使用方法:

l pd.date_range(start, end, freq) 生成一個時間段

n start:開始時間,參數可以是datetime庫中的datetime對象,也可以是字符串。

n end:結束時間,參數可以是datetime庫中的datetime對象,也可以是字符串。

n freq:時間頻率,'Y'表示年,'M’表示月,'D’表示天,'H’表示小時,'Min’表示分鐘

注意,這裏開始時間和結束時間的參數指向的對象,是可以是datetime.datetime對象:

 

 

當然,這裏的開始時間除了可以使用datetime.datetime實例以外(這裏注意,是使用的datetime庫中的類,而不是Pandas庫),也可以用字符串來表示。

以start_time爲2019年7月17日爲例,start_time也可以是字符串'20190717'、'2019-07-17'、'2019/07/17'...

 

 

從上面可以看到,pd.date_range()方法生成的是長度爲200、數據類型爲datetime的DatetimeIndex對象,時間頻率是天。

也就是說,2019年7月17日到2020年2月1日,算上始末的日期,一共200天。這是因爲默認的頻率是每天,freq='D'。 也可以通過改變時間頻率,詳情參考上面的使用方法添加修改freq參數即可。

如果我們想要2019年7月17日爲起始,按照每天的時間頻率,生成長度爲200的DataIndex對象,可以這樣寫:

 

 

相應地,如果想要以2020年2月1日爲結束日,按照每天的時間頻率,生成長度爲200的DataIndex對象,可以這樣寫:

 

 

(三)    .to_datetime()方法

當然,上面的方法生成的是DatetimeIindex對象,可以通過pd.Series()方法轉化爲Series對象:

 

 

       但是對於不規範的日期字符串Series,需要使用pd.to_datetime()方法來對其進行轉換,比如:

 

 

(四)    DateOffset類

datetime庫中有timedelta類作爲日期的增減,Pandas中也有專門的DateOffset類作爲時間間隔對象,可以直接作用在上面的datetime型Series對象中。

其使用方法和datetime.timedelta類相似,但是要注意的是裏面的參數名最後都加了's'。

 

 

datetime型Series對象可以直接使用DataOfffset對象進行日期加減:

 

 

       也可以作用在DatetimeIndex對象中:

 

 

(五)    時間序列日期格式化

       要對datetime型的Series對象進行日期格式轉換,可以通過Series實例的方法.dt.strftime(),其格式化字符串依然可以參照datetime庫中的格式化字符串對照表:

 

 

 

       要對datetime型的Series對象進行日期格式轉換,可以通過Series實例的方法.dt.strftime(),其格式化字符串依然可以參照文章開頭的datetime庫中的格式化字符串對照表:

 

 

      但是如果留心的話可以發現,轉化之後的數據類型,已經從datetime型變成object類,也就是字符串。

      如果把字符串時間date_03重新轉化爲datetime型Series,用上面提到的pd.to_datetime()方法即可:

 

 

(六)    結後語

time庫和datetime庫以及Pandas中各種對象處理時間的方法,雖然錯綜複雜又相互關聯,但是其實在使用方面有所側重和不同。

time庫以及datetime庫的對象,一般用在程序設計的中涉及到時間的問題,比如爬蟲的時候在獲得的不規則時間時碰到的格式轉換問題,會使用很多。

Pandas中各種與時間相關的類非常多,方法非常豐富,涉及到時間處理的各個方面,主要用作序列數據的處理方面,這和time庫與datetime庫對單獨某些日期數據處理不同。

就數據分析工作而言,對時間序列數據處理的時候Pandas用得非常多,以至於很多人幾乎都忘記time庫與datetime庫的存在。總體而言,對於數據分析初學者而言,可以把Pandas作爲重點學習方面,但是time庫和datetime庫作爲Python標準庫,其時間類的基本使用方法的學習是必不可少的。

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