旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實習/?A計劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 熱門文章 > 大數(shù)據(jù)分析 > 大數(shù)據(jù)分析Python的datetime日期時間教程

大數(shù)據(jù)分析Python的datetime日期時間教程

時間:2020-05-25來源:5wd995.cn點擊量:作者:Sissi
時間:2020-05-25點擊量:作者:Sissi



  用Python處理日期和時間可能很麻煩。值得慶幸的是,有一種內(nèi)置的方法可以簡化該過程:Python datetime模塊。
 

  datetime 幫助我們識別和處理與時間相關的元素,例如日期,小時,分鐘,秒,星期幾,月,年等。它提供各種服務,例如管理時區(qū)和夏時制。它可以處理時間戳數(shù)據(jù)。它可以從字符串中提取星期幾,每月幾號以及其他日期和時間格式。
 

  簡而言之,這是一種處理Python中與日期和時間相關的任何東西的強大方法。因此,讓我們開始吧!
 

  在大數(shù)據(jù)分析Python的日期時間教程中,我們將詳細了解python datetime函數(shù),包括:
 

  a.創(chuàng)建日期對象

  b.從日期開始計算年月

  c.從日期獲取月日和工作日

  d.從日期獲取小時和分鐘

  e.從日期開始獲取一年中的第幾周

  f.將日期對象轉(zhuǎn)換為時間戳

  g.將UNIX時間戳字符串轉(zhuǎn)換為日期對象

  h.處理timedelta對象

  i.得到兩個日期和時間之間的差異

  g.格式化日期:strftime()和strptime()

  k.處理時區(qū)

  l.使用Pandas日期時間對象

  1)獲取年,月,日,小時和分鐘

  2)獲取工作日和一年中的某天

  3)將日期對象轉(zhuǎn)換為DataFrame索引
 

  在學習本教程時,我們建議您在自己的計算機上運行代碼。另外,如果你想在瀏覽器中運行的代碼,并以互動的方式學習與回答檢查,以確保你得到它的權(quán)利。
 

  Python日期時間類
 

  在開始編寫代碼之前,值得研究一下datetime 模塊中使用的五個主要對象類。根據(jù)我們要執(zhí)行的操作,我們可能需要使用以下一個或多個不同的類:
 

  1)datetime –允許我們一起操作時間和日期(月,日,年,小時,秒,微秒)。

  2)日期 –使我們可以獨立于時間(月,日,年)操縱日期。

  3)時間 –允許我們獨立于日期(小時,分鐘,秒,微秒)操縱時間。

  4)timedelta -甲 持續(xù)時間 的用于操作的日期和測量時間。

  5)tzinfo —用于處理時區(qū)的抽象類。
 

  如果這些區(qū)別還沒有意義,請不用擔心!讓我們深入研究 datetime 并開始使用它,以更好地了解它們的應用方式。
 

  創(chuàng)建日期對象
 

  首先,讓我們仔細看看一個 datetime 對象。由于 datetime 既是一個模塊又是該模塊中的一個類,所以我們將從datetime 從datetime 模塊中導入該類 開始 。
 

  然后,我們將打印當前日期和時間,以仔細查看datetime 對象中包含的內(nèi)容 。我們可以使用datetime的 .now() 功能來做到這一點 。我們將打印日期時間對象,然后使用來打印其類型, type() 以便我們仔細觀察。
 

大數(shù)據(jù)分析Python的日期時間教程
 

  從上面的結(jié)果我們可以看到,datetime_object 確實是 該類的一個 datetime 對象 datetime。這包括年,月,日,小時,分鐘,秒和微秒。
 

  從日期中提取年份和月份
 

  現(xiàn)在我們已經(jīng)看到了是什么讓一個 datetime 對象,我們可能已經(jīng)猜到了如何 date 和 time 對象看,因為我們知道, date 物體就像 datetime 沒有時間數(shù)據(jù)和 time 對象就像 datetime 沒有最新數(shù)據(jù)。
 

  我們還可以解決一些問題。例如,在大多數(shù)數(shù)據(jù)集中,日期和時間信息以字符串格式存儲!另外,我們可能不 想要 所有這些日期和時間數(shù)據(jù)-如果我們要進行諸如月度銷售分析之類的事情,將事情分解成微秒就不會很有用。
 

  因此,現(xiàn)在讓我們開始深入研究數(shù)據(jù)科學中的一項常見任務:使用來從字符串中僅提取我們實際想要的元素 datetime。
 

  為此,我們需要做一些事情。
 

  使用strptime()和strftime()處理日期和時間字符串
 

  幸運的是,datetime 包含兩個方法, strptime() 以及 strftime(),用于從字符串對象轉(zhuǎn)換成 datetime 對象,反之亦然。 strptime() 可以讀取帶有日期和時間信息的字符串并將其轉(zhuǎn)換為 datetime 對象, strftime() 并將datetime對象轉(zhuǎn)換回字符串。
 

  當然, strptime() 這不是魔術,它不能將任何 字符串轉(zhuǎn)換為日期和時間,需要我們的一點幫助來解釋它所看到的內(nèi)容!但是它能夠讀取日期和時間數(shù)據(jù)的大多數(shù)常規(guī)字符串格式(有關更多詳細信息,請參閱 文檔)。讓我們給它一個日期字符串,格式為YYYY-MM-DD,看看它能做什么!

大數(shù)據(jù)分析Python的日期時間教程
 

  請注意,它strptime() 帶有兩個參數(shù):字符串(my_string)和 "%Y-%m-%d"另一個告訴 strptime() 如何解釋輸入字符串的字符串 my_string。 %Y,例如,告訴它期望字符串的前四個字符為年份。
 

  文檔中提供了這些模式的完整列表 ,我們將在本教程的后面部分更深入地介紹這些方法。
 

  您可能還注意到, 00:00:00 日期中已經(jīng)添加了時間。這是因為我們創(chuàng)建了一個 datetime 對象,其中必須包含日期 和 時間。 00:00:00 是在我們輸入的字符串中未指定時間的情況下將分配的默認時間。
 

  無論如何,我們希望將日期的特定元素分開進行分析。一種方法可以做到這一點使用內(nèi)置的DateTime對象的類屬性,像 .month 或 .year:

大數(shù)據(jù)分析Python的日期時間教程
 

  從日期獲取每月的某天和一周的某天
 

  讓我們做更多的提取,因為這是一個非常普通的任務。這次,我們將嘗試從中獲取每月的某天和一周的某天 my_date。Datetime使用它的.weekday() 函數(shù)將星期幾作為數(shù)字,但是我們可以使用calendar 模塊和稱為方法將其 轉(zhuǎn)換為文本格式(即,星期一,星期二,星期三…) day_name。
 

  我們將從導入開始 calendar,然后使用 .day and .weekday() on my_date。從那里,我們可以像這樣獲取文本格式的星期幾:

大數(shù)據(jù)分析Python的日期時間教程
 

  等一下,看起來有點奇怪!一周的第三天應該是星期三,而不是星期四,對吧?
 

  讓我們day_name 使用for循環(huán)仔細查看該 變量:

大數(shù)據(jù)分析Python的日期時間教程
 

  現(xiàn)在我們可以看到Python從星期一開始,從索引0開始計數(shù),而不是從1開始計數(shù)。因此,將數(shù)字3轉(zhuǎn)換為“ Thursday”是有道理的。
 

  從Python日期時間對象獲取小時和分鐘
 

  現(xiàn)在,讓我們深入研究時間,并從datetime對象中提取小時和分鐘。就像我們上面對月份和年份所做的操作一樣,我們可以使用類屬性 .hour 并 .minute 獲取一天中的小時和分鐘。
 

  讓我們使用.now() 函數(shù)設置新的日期和時間。截至撰寫本文時,它是2019年10月25日上午10:25。當然,根據(jù)選擇運行此代碼的時間,您將獲得不同的結(jié)果!

大數(shù)據(jù)分析Python的日期時間教程
 

  從日期時間對象獲取一年中的星期
 

  我們也可以用來做更奇特的事情 datetime。例如,如果我們想知道一年中的哪一周?


  我們可以從datetime 具有該.isocalendar() 功能的對象中 獲取年,年中的星期幾和星期幾 。
 

  具體來說, isocalendar() 返回具有ISO年,周號和工作日的元組。在 ISO日歷 是基于公歷廣泛使用的標準日歷。您可以在該鏈接上詳細了解它,但是出于我們的目的,我們需要知道的是它作為常規(guī)日歷運行,從每周的星期一開始。

大數(shù)據(jù)分析Python的日期時間教程
 

  請注意,在ISO日歷中,星期從1開始計數(shù),因此這里5代表星期中的正確日期:星期五。
 

  從上面我們可以看到,這是一年的第43周,但是如果我們想隔離該數(shù)字,則可以像對其他任何Python列表或元組那樣使用索引來實現(xiàn):

大數(shù)據(jù)分析Python的日期時間教程
 

  將日期對象轉(zhuǎn)換為Unix時間戳和反之
 

  在編程中,遇到作為時間戳存儲的時間和日期數(shù)據(jù),或者想以Unix時間戳格式存儲自己的數(shù)據(jù)并不少見。
 

  我們可以使用datetime的內(nèi)置timestamp() 函數(shù)來做到這一點 ,該函數(shù)將一個 datetime 對象作為參數(shù)并以時間戳格式返回該日期和時間:

大數(shù)據(jù)分析Python的日期時間教程
 

  同樣,我們可以使用進行反向轉(zhuǎn)換fromtimestamp()。此 datetime 函數(shù)以時間戳(浮點格式)作為參數(shù)并返回一個 datetime 對象,如下所示:

大數(shù)據(jù)分析Python的日期時間教程
 

  使用Timedelta對象測量時間跨度
 

  通常,我們可能想使用Python datetime測量時間跨度或持續(xù)時間。我們可以使用其內(nèi)置timedelta 類來做到這一點 。甲 timedelta 對象表示的兩個日期或時間之間的時間量。我們可以使用它來測量時間跨度,或者通過對日期或時間進行加減來操縱日期或時間,等等。
 

  默認情況下,timedelta對象的所有參數(shù)均設置為零。讓我們創(chuàng)建一個新的timedelta對象,該對象長兩個星期,然后看一下它的外觀:

大數(shù)據(jù)分析Python的日期時間教程
 

  請注意,我們可以使用timedelta class屬性獲得以天為單位的持續(xù)時間.days。正如我們在其文檔中看到的那樣 ,我們還可以以秒或微秒為單位獲取該持續(xù)時間。
 

  讓我們創(chuàng)建另一個timedelta持續(xù)時間以進行更多練習:

大數(shù)據(jù)分析Python的日期時間教程
 

  現(xiàn)在,讓我們開始使用timedelta對象和datetime對象來做一些數(shù)學運算!具體來說,讓我們在當前時間和日期上添加一些不同的持續(xù)時間,以查看15天后(兩周前的日期)后的日期。
 

  為此,我們可以使用 + 或 - 運算符在datetime對象中添加timedelta對象或從中減去。結(jié)果將是datetime對象,加上或減去我們的timedelta對象中指定的持續(xù)時間??岚?
 

  (注意:在下面的代碼中,它是10月25日上午11:12;由于我們datetime 使用該.now() 函數(shù)獲取對象 ,因此您的結(jié)果將根據(jù)運行代碼的時間而有所不同 )。

大數(shù)據(jù)分析Python的日期時間教程
 

  請注意,這些數(shù)學運算的輸出仍然是一個datetime 對象。
 

  找出兩個日期和時間之間的差異
 

  與上面的操作類似,我們還可以從另一個日期中減去一個日期,以使用datetime找出它們之間的時間跨度。
 

  由于此數(shù)學運算的結(jié)果是一個 持續(xù)時間,因此當我們從另一個日期減去一個日期時產(chǎn)生的對象將是一個 timedelta 對象。
 

  在這里,我們將創(chuàng)建兩個 date 對象(注意,這些datetime 對象與對象的工作原理相同 ,只是不包含時間數(shù)據(jù)),并從另一個對象中減去一個對象以找到持續(xù)時間:

大數(shù)據(jù)分析Python的日期時間教程
 

  上面,為了清楚起見,我們僅使用日期,但是我們可以對datetime 對象執(zhí)行相同的操作以獲取更精確的度量,包括小時,分鐘和秒:

大數(shù)據(jù)分析Python的日期時間教程
 

  格式化日期:有關strftime()和strptime()的更多信息
 

  我們在 前面strftime() 和 strptime()前面進行了簡要介紹 ,但讓我們仔細研究這些方法,因為它們對于Python中的數(shù)據(jù)分析工作通常很重要。
 

  strptime() 是我們之前使用的方法,您會記得它可以將以文本字符串格式設置的日期和時間轉(zhuǎn)換為datetime對象,格式如下:
 

  time.strptime(string, format)
 

  請注意,它帶有兩個參數(shù):
 

  1)string-我們要轉(zhuǎn)換的字符串格式的時間
 

  2)format-字符串中時間的特定格式,以便strptime()可以正確解析它
 

  這次嘗試轉(zhuǎn)換另一種日期字符串。 該站點 對于查找有助于strptime() 解釋我們的字符串輸入所需的格式代碼是非常有用的參考 。

大數(shù)據(jù)分析Python的日期時間教程
 

  現(xiàn)在,讓我們做一些更高級的操作,以實踐到目前為止所學的一切!我們將從字符串格式的日期開始,將其轉(zhuǎn)換為datetime對象,然后看一下幾種不同的格式化方式(dd / mm和mm / dd)。
 

  然后,堅持使用mm / dd格式,將其轉(zhuǎn)換為Unix時間戳。然后,我們將它轉(zhuǎn)換成一個 datetime 對象,并轉(zhuǎn)換 是使用一些不同的回字符串 的strftime模式 來控制輸出:

大數(shù)據(jù)分析Python的日期時間教程


  這是您可以使用備忘單保存的圖像,用于常見的,有用的strptime和strftime模式:

大數(shù)據(jù)分析Python的日期時間教程
 

  讓我們用這些做更多的練習:

大數(shù)據(jù)分析Python的日期時間教程
 

  處理時區(qū)
 

  當涉及時區(qū)時,在Pythin中處理日期和時間會變得更加復雜。值得慶幸的是,該 pytz 模塊可以幫助我們處理跨時區(qū)轉(zhuǎn)換。它還可以在使用夏令時的地點處理夏令時。
 

  我們可以使用該 localize 函數(shù)向Python日期時間對象添加時區(qū)位置。然后,我們可以使用該函數(shù) astimezone() 將現(xiàn)有的本地時區(qū)轉(zhuǎn)換為我們指定的任何其他時區(qū)(它將要轉(zhuǎn)換成的時區(qū)作為參數(shù))。
 

  例如:

大數(shù)據(jù)分析Python的日期時間教程
 

  使用包含多個不同時區(qū)的數(shù)據(jù)集時,此模塊可以幫助簡化工作。
 

  使用熊貓Datetime對象
 

  數(shù)據(jù)科學家之所以喜歡 pandas ,有很多原因。其中之一是它包含用于處理時間序列數(shù)據(jù)的廣泛功能。與datetime 自身非常相似 ,熊貓同時具有 datetime 和 timedelta 對象,分別用于指定日期,時間和持續(xù)時間。
 

  我們可以使用以下功能將日期,時間和持續(xù)時間文本字符串轉(zhuǎn)換為pandas Datetime對象:
 

  1)to_datetime():將字符串日期和時間轉(zhuǎn)換為Python datetime對象。

  2)to_timedelta():以天,小時,分鐘和秒為單位查找時間差異。
 

  正如我們將看到的那樣,這些函數(shù)實際上非常擅長于通過自動檢測其格式將字符串轉(zhuǎn)換為Python datetime對象,而無需我們使用strftime模式對其進行定義。
 

  讓我們看一個簡單的例子:

大數(shù)據(jù)分析Python的日期時間教程
 

  請注意,即使我們給它提供了一個包含一些復雜因素的字符串,例如“ th”和“ sep”,而不是“ Sep”?;?ldquo; 9月”,pandas能夠正確解析字符串并返回格式化日期。
 

  我們還可以使用熊貓(及其一些附屬的numpy功能)將日期范圍自動創(chuàng)建為熊貓系列。例如,下面我們從上面定義的日期開始創(chuàng)建一系列十二個日期。然后,我們使用pd.date_range()以下命令從預定義日期開始創(chuàng)建一系列不同的日期 :

大數(shù)據(jù)分析Python的日期時間教程
 

  以熊貓為單位獲取年,月,日,小時,分鐘
 

  使用dt 所有列的屬性,我們可以輕松地從熊貓數(shù)據(jù)框的列中的日期獲取年,月,日,小時或分鐘。例如,我們可以 df['date'].dt.year 用來僅從包含完整日期的熊貓列中提取年份。
 

  為了探索這一點,讓我們使用上面創(chuàng)建的系列之一來制作一個快速的DataFrame:

大數(shù)據(jù)分析Python的日期時間教程
 

  現(xiàn)在,讓我們使用相關的Python datetime(通過訪問dt)屬性為日期的每個元素創(chuàng)建單獨的列 :
 

大數(shù)據(jù)分析Python的日期時間教程

  獲取工作日和一年中的某天
 

  熊貓還能夠從其datetime對象中獲取其他元素,例如星期幾和一年中的一天。同樣,我們可以使用 dt 屬性來執(zhí)行此操作。請注意,這里與Python一般一樣,星期從星期一的索引0開始,所以星期5是 星期六。

大數(shù)據(jù)分析Python的日期時間教程
 

  將日期對象轉(zhuǎn)換為DataFrame索引
 

  我們還可以使用pandas將datetime列添加到DataFrame的索引中。這對于諸如探索性數(shù)據(jù)可視化之類的任務可能非常有用,因為matplotlib將識別出DataFrame索引是一個時間序列,并相應地繪制數(shù)據(jù)。
 

  為此,我們要做的就是重新定義 df.index:

大數(shù)據(jù)分析Python的日期時間教程
 

  結(jié)論
 

  在大數(shù)據(jù)分析Python的日期時間教程中,我們深入研究了Python日期時間,并且還對熊貓和日歷模塊做了一些工作。我們已經(jīng)介紹了很多內(nèi)容,但是請記住:最好的學習方法是親自編寫代碼!
 

  如果您想練習datetime 使用交互式答案檢查來編寫代碼,請查看我們的 大數(shù)據(jù)分析Python課程 , 以通過交互式答案檢查和瀏覽器內(nèi)代碼運行來學習Python中的日期時間。



 

預約申請免費試聽課

填寫下面表單即可預約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學習,可推薦就業(yè)!

?2007-2021/北京漫動者教育科技有限公司版權(quán)所有
備案號:京ICP備12034770號

?2007-2022/ 5wd995.cn 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號

網(wǎng)站地圖