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

大數(shù)據(jù)分析Python Datetime使用教程

時(shí)間:2020-07-08來源:5wd995.cn點(diǎn)擊量:作者:Sissi
時(shí)間:2020-07-08點(diǎn)擊量:作者:Sissi



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

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

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

  在大數(shù)據(jù)分析Python Datetime使用教程中,我們將詳細(xì)了解python datetime函數(shù),包括:
 

  1)創(chuàng)建日期對象

  2)從日期開始計(jì)算年月

  3)從日期開始獲取月日和工作日

  4)從日期獲取小時(shí)和分鐘

  5)從日期開始獲取一年中的第幾周

  6)將日期對象轉(zhuǎn)換為時(shí)間戳

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

  8)處理timedelta對象

  9)得到兩個(gè)日期和時(shí)間之間的差異

  10)格式化日期:strftime()和strptime()

  11)處理時(shí)區(qū)

  12)使用Pandas日期時(shí)間對象

    a)獲取年,月,日,小時(shí)和分鐘

    b)獲取一年中的第幾天

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

  在學(xué)習(xí)大數(shù)據(jù)分析Python Datetime使用教程時(shí),我們建議您在自己的計(jì)算機(jī)上運(yùn)行代碼。另外,如果你想在瀏覽器中運(yùn)行的代碼,并以互動的方式學(xué)習(xí)與回答檢查,以確保你得到它的權(quán)利,我們的Python中間當(dāng)然 有 Python中的日期時(shí)間的教訓(xùn) ,我們建議。您可以通過注冊免費(fèi)的用戶帳戶來開始學(xué)習(xí)。
 

  Python日期時(shí)間類
 

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

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

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

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

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

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

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

  創(chuàng)建日期對象
 

  首先,讓我們仔細(xì)看看一個(gè) datetime 對象。由于 datetime 既是一個(gè)模塊又是該模塊中的一個(gè)類,所以我們將從datetime 從datetime 模塊中導(dǎo)入該類 開始 。
 

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

大數(shù)據(jù)分析
 

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

  從日期中提取年份和月份
 

  現(xiàn)在我們已經(jīng)看到了是什么讓一個(gè) datetime 對象,我們可能已經(jīng)猜到了如何 date 和 time 對象看,因?yàn)槲覀冎溃?date 物體就像 datetime 沒有時(shí)間數(shù)據(jù)和 time 對象就像 datetime 沒有最新數(shù)據(jù)。
 

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

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

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

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

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

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

大數(shù)據(jù)分析
 

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

  文檔中提供了這些模式的完整列表 ,我們將在大數(shù)據(jù)分析Python Datetime使用教程的后面部分更深入地介紹這些方法。
 

  您可能還注意到, 00:00:00 日期中已添加的時(shí)間。那是因?yàn)槲覀儎?chuàng)建了一個(gè) datetime 對象,其中必須包含日期 和 時(shí)間。 00:00:00 是在我們輸入的字符串中未指定時(shí)間的情況下將分配的默認(rèn)時(shí)間。
 

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

大數(shù)據(jù)分析
 

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

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

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

大數(shù)據(jù)分析
 

  等一下,看起來有點(diǎn)奇怪!一周的第三天應(yīng)該是星期三,而不是星期四,對吧?
 

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

大數(shù)據(jù)分析
 

  現(xiàn)在我們可以看到Python從星期一開始,從索引0開始計(jì)數(shù),而不是從1開始計(jì)數(shù)。因此,如上所述將數(shù)字3轉(zhuǎn)換為“星期四”是有意義的。
 

  從Python日期時(shí)間對象獲取小時(shí)和分鐘
 

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

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

大數(shù)據(jù)分析
 

  從日期時(shí)間對象獲取一年中的星期
 

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

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

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

大數(shù)據(jù)分析
 

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

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

大數(shù)據(jù)分析
 

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

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

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

大數(shù)據(jù)分析
 

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

大數(shù)據(jù)分析
 

  使用Timedelta對象測量時(shí)間跨度
 

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

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

大數(shù)據(jù)分析
 

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

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

大數(shù)據(jù)分析
 

  現(xiàn)在,讓我們開始使用timedelta對象和datetime對象進(jìn)行一些數(shù)學(xué)運(yùn)算!具體來說,讓我們在當(dāng)前時(shí)間和日期上添加幾個(gè)不同的持續(xù)時(shí)間,以查看15天后(兩周前的日期)后的日期。
 

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

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

大數(shù)據(jù)分析
 

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

  找出兩個(gè)日期和時(shí)間之間的差異
 

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

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

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

大數(shù)據(jù)分析
 

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

大數(shù)據(jù)分析
 

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

  我們在 前面strftime() 和 strptime()前面進(jìn)行了簡要介紹 ,但讓我們仔細(xì)看一下這些方法,因?yàn)樗鼈儗τ赑ython中的數(shù)據(jù)分析工作通常很重要。
 

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

  time.strptime(string, format)
 

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

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

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

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

大數(shù)據(jù)分析
 

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

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

大數(shù)據(jù)分析
 

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

大數(shù)據(jù)分析
 

  讓我們使用這些進(jìn)行更多練習(xí):

大數(shù)據(jù)分析
 

  處理時(shí)區(qū)
 

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

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

  例如:

大數(shù)據(jù)分析
 

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

  使用pandasDatetime對象
 

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

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

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

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

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

  讓我們看一個(gè)簡單的例子:

大數(shù)據(jù)分析
 

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

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

大數(shù)據(jù)分析
 

  以pandas為單位獲取年,月,日,小時(shí),分鐘
 

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

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

大數(shù)據(jù)分析
 

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

大數(shù)據(jù)分析
 

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

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

大數(shù)據(jù)分析
 

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

  我們還可以使用pandas將datetime列添加到DataFrame的索引中。這對于諸如探索性數(shù)據(jù)可視化之類的任務(wù)可能非常有幫助,因?yàn)閙atplotlib將識別出DataFrame索引是一個(gè)時(shí)間序列并相應(yīng)地繪制數(shù)據(jù)。
 

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

大數(shù)據(jù)分析
 

  結(jié)論
 

  在大數(shù)據(jù)分析Python Datetime使用教程中,我們深入研究了Python日期時(shí)間,并且還對pandas和日歷模塊做了一些工作。我們已經(jīng)介紹了很多內(nèi)容,但是請記?。鹤詈玫膶W(xué)習(xí)方法是親自編寫代碼!
 

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

 

預(yù)約申請免費(fèi)試聽課

填寫下面表單即可預(yù)約申請免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(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)站地圖