用Python處理日期和時間可能很麻煩。值得慶幸的是,有一種內置的方法可以簡化該過程:Python datetime模塊。
datetime 幫助我們識別和處理與時間相關的元素,例如日期,小時,分鐘,秒,星期幾,月,年等。它提供各種服務,例如管理時區和夏時制。它可以處理時間戳數據。它可以從字符串中提取星期幾,每月幾號以及其他日期和時間格式。
簡而言之,這是一種處理Python中與日期和時間相關的任何東西的強大方法。因此,讓我們開始吧!
在大數據分析Python的日期時間教程中,我們將詳細了解python datetime函數,包括:
a.創建日期對象
b.從日期開始計算年月
c.從日期獲取月日和工作日
d.從日期獲取小時和分鐘
e.從日期開始獲取一年中的第幾周
f.將日期對象轉換為時間戳
g.將UNIX時間戳字符串轉換為日期對象
h.處理timedelta對象
i.得到兩個日期和時間之間的差異
g.格式化日期:strftime()和strptime()
k.處理時區
l.使用Pandas日期時間對象
1)獲取年,月,日,小時和分鐘
2)獲取工作日和一年中的某天
3)將日期對象轉換為DataFrame索引
在學習本教程時,我們建議您在自己的計算機上運行代碼。另外,如果你想在瀏覽器中運行的代碼,并以互動的方式學習與回答檢查,以確保你得到它的權利。
Python日期時間類
在開始編寫代碼之前,值得研究一下datetime 模塊中使用的五個主要對象類。根據我們要執行的操作,我們可能需要使用以下一個或多個不同的類:
1)datetime –允許我們一起操作時間和日期(月,日,年,小時,秒,微秒)。
2)日期 –使我們可以獨立于時間(月,日,年)操縱日期。
3)時間 –允許我們獨立于日期(小時,分鐘,秒,微秒)操縱時間。
4)timedelta -甲 持續時間 的用于操作的日期和測量時間。
5)tzinfo —用于處理時區的抽象類。
如果這些區別還沒有意義,請不用擔心!讓我們深入研究 datetime 并開始使用它,以更好地了解它們的應用方式。
創建日期對象
首先,讓我們仔細看看一個 datetime 對象。由于 datetime 既是一個模塊又是該模塊中的一個類,所以我們將從datetime 從datetime 模塊中導入該類 開始 。
然后,我們將打印當前日期和時間,以仔細查看datetime 對象中包含的內容 。我們可以使用datetime的 .now() 功能來做到這一點 。我們將打印日期時間對象,然后使用來打印其類型, type() 以便我們仔細觀察。
從上面的結果我們可以看到,datetime_object 確實是 該類的一個 datetime 對象 datetime。這包括年,月,日,小時,分鐘,秒和微秒。
從日期中提取年份和月份
現在我們已經看到了是什么讓一個 datetime 對象,我們可能已經猜到了如何 date 和 time 對象看,因為我們知道, date 物體就像 datetime 沒有時間數據和 time 對象就像 datetime 沒有最新數據。
我們還可以解決一些問題。例如,在大多數數據集中,日期和時間信息以字符串格式存儲!另外,我們可能不 想要 所有這些日期和時間數據-如果我們要進行諸如月度銷售分析之類的事情,將事情分解成微秒就不會很有用。
因此,現在讓我們開始深入研究數據科學中的一項常見任務:使用來從字符串中僅提取我們實際想要的元素 datetime。
為此,我們需要做一些事情。
使用strptime()和strftime()處理日期和時間字符串
幸運的是,datetime 包含兩個方法, strptime() 以及 strftime(),用于從字符串對象轉換成 datetime 對象,反之亦然。 strptime() 可以讀取帶有日期和時間信息的字符串并將其轉換為 datetime 對象, strftime() 并將datetime對象轉換回字符串。
當然, strptime() 這不是魔術,它不能將任何 字符串轉換為日期和時間,需要我們的一點幫助來解釋它所看到的內容!但是它能夠讀取日期和時間數據的大多數常規字符串格式(有關更多詳細信息,請參閱 文檔)。讓我們給它一個日期字符串,格式為YYYY-MM-DD,看看它能做什么!
請注意,它strptime() 帶有兩個參數:字符串(my_string)和 "%Y-%m-%d"另一個告訴 strptime() 如何解釋輸入字符串的字符串 my_string。 %Y,例如,告訴它期望字符串的前四個字符為年份。
文檔中提供了這些模式的完整列表 ,我們將在本教程的后面部分更深入地介紹這些方法。
您可能還注意到, 00:00:00 日期中已經添加了時間。這是因為我們創建了一個 datetime 對象,其中必須包含日期 和 時間。 00:00:00 是在我們輸入的字符串中未指定時間的情況下將分配的默認時間。
無論如何,我們希望將日期的特定元素分開進行分析。一種方法可以做到這一點使用內置的DateTime對象的類屬性,像 .month 或 .year:
從日期獲取每月的某天和一周的某天
讓我們做更多的提取,因為這是一個非常普通的任務。這次,我們將嘗試從中獲取每月的某天和一周的某天 my_date。Datetime使用它的.weekday() 函數將星期幾作為數字,但是我們可以使用calendar 模塊和稱為方法將其 轉換為文本格式(即,星期一,星期二,星期三…) day_name。
我們將從導入開始 calendar,然后使用 .day and .weekday() on my_date。從那里,我們可以像這樣獲取文本格式的星期幾:
等一下,看起來有點奇怪!一周的第三天應該是星期三,而不是星期四,對吧?
讓我們day_name 使用for循環仔細查看該 變量:
現在我們可以看到Python從星期一開始,從索引0開始計數,而不是從1開始計數。因此,將數字3轉換為“ Thursday”是有道理的。
從Python日期時間對象獲取小時和分鐘
現在,讓我們深入研究時間,并從datetime對象中提取小時和分鐘。就像我們上面對月份和年份所做的操作一樣,我們可以使用類屬性 .hour 并 .minute 獲取一天中的小時和分鐘。
讓我們使用.now() 函數設置新的日期和時間。截至撰寫本文時,它是2019年10月25日上午10:25。當然,根據選擇運行此代碼的時間,您將獲得不同的結果!
從日期時間對象獲取一年中的星期
我們也可以用來做更奇特的事情 datetime。例如,如果我們想知道一年中的哪一周?
我們可以從datetime 具有該.isocalendar() 功能的對象中 獲取年,年中的星期幾和星期幾 。
具體來說, isocalendar() 返回具有ISO年,周號和工作日的元組。在 ISO日歷 是基于公歷廣泛使用的標準日歷。您可以在該鏈接上詳細了解它,但是出于我們的目的,我們需要知道的是它作為常規日歷運行,從每周的星期一開始。
請注意,在ISO日歷中,星期從1開始計數,因此這里5代表星期中的正確日期:星期五。
從上面我們可以看到,這是一年的第43周,但是如果我們想隔離該數字,則可以像對其他任何Python列表或元組那樣使用索引來實現:
將日期對象轉換為Unix時間戳和反之
在編程中,遇到作為時間戳存儲的時間和日期數據,或者想以Unix時間戳格式存儲自己的數據并不少見。
我們可以使用datetime的內置timestamp() 函數來做到這一點 ,該函數將一個 datetime 對象作為參數并以時間戳格式返回該日期和時間:
同樣,我們可以使用進行反向轉換fromtimestamp()。此 datetime 函數以時間戳(浮點格式)作為參數并返回一個 datetime 對象,如下所示:
使用Timedelta對象測量時間跨度
通常,我們可能想使用Python datetime測量時間跨度或持續時間。我們可以使用其內置timedelta 類來做到這一點 。甲 timedelta 對象表示的兩個日期或時間之間的時間量。我們可以使用它來測量時間跨度,或者通過對日期或時間進行加減來操縱日期或時間,等等。
默認情況下,timedelta對象的所有參數均設置為零。讓我們創建一個新的timedelta對象,該對象長兩個星期,然后看一下它的外觀:
請注意,我們可以使用timedelta class屬性獲得以天為單位的持續時間.days。正如我們在其文檔中看到的那樣 ,我們還可以以秒或微秒為單位獲取該持續時間。
讓我們創建另一個timedelta持續時間以進行更多練習:
現在,讓我們開始使用timedelta對象和datetime對象來做一些數學運算!具體來說,讓我們在當前時間和日期上添加一些不同的持續時間,以查看15天后(兩周前的日期)后的日期。
為此,我們可以使用 + 或 - 運算符在datetime對象中添加timedelta對象或從中減去。結果將是datetime對象,加上或減去我們的timedelta對象中指定的持續時間??岚?
(注意:在下面的代碼中,它是10月25日上午11:12;由于我們datetime 使用該.now() 函數獲取對象 ,因此您的結果將根據運行代碼的時間而有所不同 )。
請注意,這些數學運算的輸出仍然是一個datetime 對象。
找出兩個日期和時間之間的差異
與上面的操作類似,我們還可以從另一個日期中減去一個日期,以使用datetime找出它們之間的時間跨度。
由于此數學運算的結果是一個 持續時間,因此當我們從另一個日期減去一個日期時產生的對象將是一個 timedelta 對象。
在這里,我們將創建兩個 date 對象(注意,這些datetime 對象與對象的工作原理相同 ,只是不包含時間數據),并從另一個對象中減去一個對象以找到持續時間:
上面,為了清楚起見,我們僅使用日期,但是我們可以對datetime 對象執行相同的操作以獲取更精確的度量,包括小時,分鐘和秒:
格式化日期:有關strftime()和strptime()的更多信息
我們在 前面strftime() 和 strptime()前面進行了簡要介紹 ,但讓我們仔細研究這些方法,因為它們對于Python中的數據分析工作通常很重要。
strptime() 是我們之前使用的方法,您會記得它可以將以文本字符串格式設置的日期和時間轉換為datetime對象,格式如下:
time.strptime(string, format)
請注意,它帶有兩個參數:
1)string-我們要轉換的字符串格式的時間
2)format-字符串中時間的特定格式,以便strptime()可以正確解析它
這次嘗試轉換另一種日期字符串。 該站點 對于查找有助于strptime() 解釋我們的字符串輸入所需的格式代碼是非常有用的參考 。
現在,讓我們做一些更高級的操作,以實踐到目前為止所學的一切!我們將從字符串格式的日期開始,將其轉換為datetime對象,然后看一下幾種不同的格式化方式(dd / mm和mm / dd)。
然后,堅持使用mm / dd格式,將其轉換為Unix時間戳。然后,我們將它轉換成一個 datetime 對象,并轉換 是使用一些不同的回字符串 的strftime模式 來控制輸出:
這是您可以使用備忘單保存的圖像,用于常見的,有用的strptime和strftime模式:
讓我們用這些做更多的練習:
處理時區
當涉及時區時,在Pythin中處理日期和時間會變得更加復雜。值得慶幸的是,該 pytz 模塊可以幫助我們處理跨時區轉換。它還可以在使用夏令時的地點處理夏令時。
我們可以使用該 localize 函數向Python日期時間對象添加時區位置。然后,我們可以使用該函數 astimezone() 將現有的本地時區轉換為我們指定的任何其他時區(它將要轉換成的時區作為參數)。
例如:
使用包含多個不同時區的數據集時,此模塊可以幫助簡化工作。
使用熊貓Datetime對象
數據科學家之所以喜歡 pandas ,有很多原因。其中之一是它包含用于處理時間序列數據的廣泛功能。與datetime 自身非常相似 ,熊貓同時具有 datetime 和 timedelta 對象,分別用于指定日期,時間和持續時間。
我們可以使用以下功能將日期,時間和持續時間文本字符串轉換為pandas Datetime對象:
1)to_datetime():將字符串日期和時間轉換為Python datetime對象。
2)to_timedelta():以天,小時,分鐘和秒為單位查找時間差異。
正如我們將看到的那樣,這些函數實際上非常擅長于通過自動檢測其格式將字符串轉換為Python datetime對象,而無需我們使用strftime模式對其進行定義。
讓我們看一個簡單的例子:
請注意,即使我們給它提供了一個包含一些復雜因素的字符串,例如“ th”和“ sep”,而不是“ Sep”?;?ldquo; 9月”,pandas能夠正確解析字符串并返回格式化日期。
我們還可以使用熊貓(及其一些附屬的numpy功能)將日期范圍自動創建為熊貓系列。例如,下面我們從上面定義的日期開始創建一系列十二個日期。然后,我們使用pd.date_range()以下命令從預定義日期開始創建一系列不同的日期 :
以熊貓為單位獲取年,月,日,小時,分鐘
使用dt 所有列的屬性,我們可以輕松地從熊貓數據框的列中的日期獲取年,月,日,小時或分鐘。例如,我們可以 df['date'].dt.year 用來僅從包含完整日期的熊貓列中提取年份。
為了探索這一點,讓我們使用上面創建的系列之一來制作一個快速的DataFrame:
現在,讓我們使用相關的Python datetime(通過訪問dt)屬性為日期的每個元素創建單獨的列 :
獲取工作日和一年中的某天
熊貓還能夠從其datetime對象中獲取其他元素,例如星期幾和一年中的一天。同樣,我們可以使用 dt 屬性來執行此操作。請注意,這里與Python一般一樣,星期從星期一的索引0開始,所以星期5是 星期六。
將日期對象轉換為DataFrame索引
我們還可以使用pandas將datetime列添加到DataFrame的索引中。這對于諸如探索性數據可視化之類的任務可能非常有用,因為matplotlib將識別出DataFrame索引是一個時間序列,并相應地繪制數據。
為此,我們要做的就是重新定義 df.index:
結論
在大數據分析Python的日期時間教程中,我們深入研究了Python日期時間,并且還對熊貓和日歷模塊做了一些工作。我們已經介紹了很多內容,但是請記?。鹤詈玫膶W習方法是親自編寫代碼!
如果您想練習datetime 使用交互式答案檢查來編寫代碼,請查看我們的 大數據分析Python課程 , 以通過交互式答案檢查和瀏覽器內代碼運行來學習Python中的日期時間。
?2007-2019/ www.zhuozheng31.icu 北京漫動者教育科技有限公司 備案號:京ICP備12034770號 監督電話:010-62568622 郵箱:bjaaa@aaaedu.cc