熱線電話:13121318867

登錄
首頁精彩閱讀傻傻分不清楚系列 | python中各種時間處理方法(下)
傻傻分不清楚系列 | python中各種時間處理方法(下)
2020-05-25
收藏

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

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

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

(一) 此Timestamp非彼Timestamp

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

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

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

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

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

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

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

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

(二) 生成時間序列

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對象:

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

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

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

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

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

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

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

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

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

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

(三) .to_datetime()方法

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

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

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

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

(四) DateOffset類

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

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

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

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

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

也可以作用在DatetimeIndex對象中:

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

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

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

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

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

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

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

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

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

(六) 結后語

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

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

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

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

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢