
相信大多數(shù)數(shù)據(jù)分析師在入手python的時(shí)候,在學(xué)習(xí)到time庫與datetime庫時(shí),都會(huì)對(duì)兩個(gè)庫里面長得很像,又相互有關(guān)聯(lián)的各種類和方法感到非常窩心。當(dāng)接觸到pandas處理時(shí)間序列的方法時(shí),再次發(fā)現(xiàn)其中各種類和方法又和前面兩個(gè)時(shí)間庫的方法“長得好像又似乎有點(diǎn)不同”,此時(shí),想必每個(gè)強(qiáng)迫癥學(xué)習(xí)著內(nèi)心早已經(jīng)發(fā)出“土撥鼠吶喊”。
趁著宅在家躲疫情的間隙,托福司機(jī)重新對(duì)這3塊知識(shí)內(nèi)容重新梳理,及時(shí)制止內(nèi)心的土撥鼠繼續(xù)吶喊,現(xiàn)分享給大家。
(一) time庫
1. time庫與datetime庫的關(guān)系
在 Python 文檔里,time是歸類在Generic Operating System Services中,換句話說,它提供的功能是更加接近于操作系統(tǒng)層面的。
而datetime庫比time庫高級(jí)了不少,提供了更多實(shí)用的方法,可以理解為datetime基于time進(jìn)行了封裝。
我們先看一下time庫。
time庫主要圍繞unix時(shí)間戳進(jìn)行操作,主要包含一個(gè)類:struct_time。
那什么是unix時(shí)間戳?它是指格林威治時(shí)間1970年01月01日00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的總秒數(shù),比如格林威治時(shí)間1970年01月01日00分01秒就以數(shù)值1來記載。
time庫中只要有四個(gè)函數(shù)可以獲得時(shí)間函數(shù),其中time.time()方法就可以獲得當(dāng)前時(shí)間戳:
比如我們想獲得當(dāng)前unix時(shí)間戳,unix時(shí)間戳以浮點(diǎn)數(shù)記載:
獲得當(dāng)?shù)貢r(shí)區(qū)的unix時(shí)間戳:
這里我們會(huì)發(fā)現(xiàn),上面的unix時(shí)間戳不再以浮點(diǎn)數(shù)記載,而是struct_time對(duì)象,里面一共記載了九個(gè)時(shí)間元素,分別是年月日時(shí)分秒,tm_wday是這周的第幾天(周一是0),tm_yday是這年的第幾天,tm_isdst是夏令時(shí)。
除此以外,time.localtime()還可以把unix時(shí)間戳轉(zhuǎn)化為struct_time格式:
2. struct_time對(duì)象的格式化
time庫中對(duì)時(shí)間進(jìn)行格式化的方法主要是通過time.strftime()方法,基本用法如下:
l time.strftime(tpl,ts)
§ tpl:格式化模塊字符串,用來定義輸出效果
§ ts:計(jì)算機(jī)內(nèi)部時(shí)間類型變量,一般使用struct_time對(duì)象
該方法返回的對(duì)象其實(shí)是字符串,比如將上面的struct_time對(duì)象gmtime進(jìn)行時(shí)間格式轉(zhuǎn)化:
上面的'%Y-%m-%d %H:%M:%S'是用來轉(zhuǎn)化strcut_time對(duì)象的格式化字符串,除此以外還有:
這個(gè)表很重要,我們后面在datetime庫中的對(duì)象以及pandas的datetime型Series對(duì)象在日期格式化操作的時(shí)候,都能用得上。
而如果我們想要將字符型的時(shí)間轉(zhuǎn)化為struct_time對(duì)象,可以用time.strptime()方法,格式剛好與time.strftime()方法對(duì)應(yīng)。
比如,如果有字符串時(shí)間'2020-02-01 16:49:11',要將其轉(zhuǎn)化為struct_time對(duì)象:
3. time庫中的休眠時(shí)間
time庫中最常用的方法還有time.sleep(),比如,如果我們想要程序等待3.3秒之后再輸出,可以寫time.sleep(3.3)
time.sleep()方法在爬蟲等各種程序中應(yīng)用較廣,再次不在累述。
(二) datetime庫
datetime庫可以說是time庫的高級(jí)封裝,在各種日期數(shù)據(jù)處理方面,相對(duì)于time庫,datetime庫作了進(jìn)一步的升級(jí)。
datetime庫主要記載時(shí)間的類有datetime.date類、datetime.time、datetime.datetime類。
1. datetime.date類
在datetime庫中,可以通過datetime.date()方法生成年、月、日時(shí)間,返回的對(duì)象是datetime.date類。
這里要注意,datetime.date類只記錄年、月、日這三個(gè)時(shí)間元素,不記錄時(shí)分秒等其他時(shí)間元素。
通過datetime.date()方法中的參數(shù)year、month、day指定年、月、日三個(gè)時(shí)間元素。
我們可以通過datetime.date.today()方法來獲得當(dāng)前的日期,該方法返回的對(duì)象也是datetime.date類。
(1) datetime.date類的屬性
另外,datetime.date類常用的屬性有year、month、day。參數(shù)都為整數(shù):
(2) datetime.date類時(shí)間格式化方法
datetime.date類的時(shí)間格式化方法也叫strftime(),比如當(dāng)前我們有datetime.date對(duì)象date_samp如下:
通過datetime.date對(duì)象直接調(diào)用.strftimie()方法進(jìn)行指定時(shí)間格式轉(zhuǎn)換如下:
而格式化字符串可以參考前面time庫的表格。這里大家會(huì)發(fā)現(xiàn),雖然格式化方法的strftime()的名字和前面一樣,且格式化字符串也和前面time庫的是一樣的,但是其調(diào)用方式卻又不相同,這也是為什么很多同學(xué)兩個(gè)時(shí)間庫的格式化方法總是不小心寫錯(cuò)的原因。
當(dāng)然,像上面這種常見的字符串日期類型,每次都要使用這么復(fù)雜的格式化字符串來轉(zhuǎn)換,未免太過繁瑣,其實(shí)datetime.date對(duì)象可以直接使用方法.isoformat()來轉(zhuǎn)化:
和datetime.date類的屬性相似,datetime.time類也有類似的屬性:
而時(shí)間格式化的方法和datetime.date類一樣,也是通過datetime.time對(duì)象的.strftime()方法來調(diào)用:
(3) unix時(shí)間戳轉(zhuǎn)換
time庫中的unix時(shí)間戳,如何轉(zhuǎn)化為datetime.date類?用實(shí)例的方法.fromtimestamp()即可,比如我們有當(dāng)前的時(shí)間戳current_timestamp:
上面的時(shí)間戳我們?nèi)绻氆@得其中的日期的話,可以使用
datetime.date.fromtimestamp()方法直接轉(zhuǎn)換:
當(dāng)然,返回來的也是datetime.date類的對(duì)象。
4. datetime.time類
datetime庫中的datetime.time類用來記載時(shí)間,包括時(shí)、分、秒、毫秒。
datetime.time()方法可以創(chuàng)建datetime.time類的對(duì)象,參數(shù)包括hour、minute、second、microsecond。
datetime.time類的屬性:
而時(shí)間格式化的方法和datetime.date類一樣,也是通過datetime.time對(duì)象的.strftime()方法來調(diào)用:
上面可以看到,datetime.time對(duì)象的.strftime()方法返回來的對(duì)象也是字符串。
同樣地,datetime.time對(duì)象也有.isoformat()方法:
但是需要留意的是, datetime.time對(duì)象并沒有.fromtimestamp()方法來進(jìn)行時(shí)間戳轉(zhuǎn)換。
5. datetime.datetime類
datetime.datetime類的對(duì)象主要是用作記錄年月日、時(shí)分秒等時(shí)間單位,我們可以把它看做是datetime.date類和datetime.time類的“結(jié)合體”。
創(chuàng)建datetime.datetime類對(duì)象的方法和datetime.time類也是基本一致的,參數(shù)包含year、month、day、hour、minute、second、microsecond。 但是至少要包含year、month、day三個(gè)參數(shù)。
而datetime.datetime類的時(shí)間格式化的方法,也是.strftime(),格式化字符串和前面也是一致的:
datetime.datetime對(duì)象的.isoformat()方法返回結(jié)果會(huì)有點(diǎn)“與眾不同”,日期和時(shí)間之間多了一個(gè)字符‘T’:
而如果想快速獲得當(dāng)前的日期時(shí)間,可以使用datetime.datetime.now():
6. datetime.timedelta類
datetime.timedelta類用來記錄時(shí)間間隔類,給一個(gè)時(shí)間點(diǎn)加減此類,即可得到一個(gè)新的時(shí)間。
datetime.timedelta()方法可以用來創(chuàng)建datetime.timedelta對(duì)象,參數(shù)包含days、hours、minutes、seconds、microseconds。
比如我們創(chuàng)建一個(gè)45天零6小時(shí)的時(shí)間間隔:
時(shí)間間隔對(duì)象生成后,就可以使用datetime對(duì)象對(duì)其進(jìn)行加減:
(三) time庫與datetime庫時(shí)間對(duì)象互轉(zhuǎn)
看到這里,相信很多同學(xué)內(nèi)心的土撥鼠都在慘叫:太多東西要記了,我太難啦~
確實(shí),使用Python寫爬蟲等程序時(shí),時(shí)常需要用到time庫與datetime庫中的各種時(shí)間對(duì)象,最為頭疼的地方往往是各種時(shí)間格式轉(zhuǎn)換。其實(shí),在了解time庫和datetime庫的各種類和屬性方法后,記住下面這張圖可以事半功倍:
我們通過一下過程捋一下思路:
字符串型時(shí)間轉(zhuǎn)datetime.datetime對(duì)象,用
datetime.datetime.strptime()方法:
datetime.datetime轉(zhuǎn)字符串,用datetime.datetime實(shí)例的.strftime()方法:
字符串型時(shí)間轉(zhuǎn)struct_time,用time.strptime()方法:
struct_time轉(zhuǎn)字符串型時(shí)間,用time.strftime()方法:
struct_time轉(zhuǎn)unix時(shí)間戳,用time.mktime()方法:
unix時(shí)間戳轉(zhuǎn)struct_time,用time.gmtime()或time.localtime()方法:
今天我們把python中time庫與datetime庫幾個(gè)主要的時(shí)間對(duì)象的方法都理清楚了,同時(shí)將其互轉(zhuǎn)的規(guī)律也作了總結(jié)和歸納。篇幅有限,我們?cè)谙乱幌盗械奈恼吕?,繼續(xù)探討pandas庫中的時(shí)間對(duì)象和time庫、datetime庫的對(duì)象相互之間的關(guān)聯(lián)性。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03