如何在 Python 中使用 DateTime
所有數(shù)據(jù)在開始時(shí)都會(huì)自動(dòng)分配一個(gè)“DOB”(出生日期)。因此,在某些時(shí)候處理數(shù)據(jù)時(shí)不可避免地會(huì)遇到日期和時(shí)間數(shù)據(jù)。本教程將帶您了解 Python 中的 datetime 模塊以及使用一些外圍庫,如pandas 和 pytz。
在 Python 中,任何與日期和時(shí)間有關(guān)的事情都由 datetime 模塊處理,它將模塊進(jìn)一步分為 5 個(gè)不同的類。類只是與對象相對應(yīng)的數(shù)據(jù)類型。下圖總結(jié)了 Python 中的 5 個(gè)日期時(shí)間類以及常用的屬性和示例。
3個(gè)有用的片段
1.將字符串轉(zhuǎn)換為日期時(shí)間格式 ,也許是使用datetime 最常見的情況。
由于日期和時(shí)間的字母數(shù)字性質(zhì),將類似的日期和時(shí)間解析為 Python 通常會(huì)被解釋為字符串。在本節(jié)中,我們將介紹如何將字符串列表解析為日期時(shí)間格式,以及如何將日期和時(shí)間數(shù)據(jù)拆分和組合到數(shù)據(jù)框中的各個(gè)列中。
片段 1 的打印輸出
但是,如果日期時(shí)間以不尋常或模棱兩可的方式格式化怎么辦?一個(gè)常見的問題是美國和歐洲的日期時(shí)間書寫方式之間的區(qū)別。在美式格式中,月份在前,而在歐洲樣式中,日期在前。
默認(rèn)情況下,pandas 中的 to_datetime 通過將前一個(gè)少于 12 位 (<12) 的數(shù)字解析為月份來將對象轉(zhuǎn)換為日期時(shí)間。例如,2/11/2021 將被解析為 2021-02-11,但 13/11/2021 將被解析為 2021-11-13。但是,有這個(gè)格式參數(shù)允許您以其他方式定義格式。
或者, strftime() 方法有助于在返回字符串之前格式化日期時(shí)間。在以下示例中,原始日期時(shí)間之間的破折號(hào) (-) 替換為反斜杠 (/),數(shù)字月份 (02) 替換為縮寫的英語術(shù)語 (Feb)。
由于有多種方法可以解釋日期(日、月、年)和時(shí)間(時(shí)、分、秒),因此了解不同的格式代碼至關(guān)重要。下表是常用格式代碼的備忘單。
2.使用時(shí)區(qū)
沒有時(shí)區(qū)信息的 datetime 對象被稱為“naive”,有時(shí)區(qū)信息的對象(通常在末尾帶有 +HH:MM 對應(yīng) GMT)被認(rèn)為是“aware”。pytz 可能是 Python 中最全面的庫之一,它簡化了時(shí)區(qū)計(jì)算的任務(wù)。以下代碼段將向您展示如何在“naive”和“aware” datetime 對象之間進(jìn)行轉(zhuǎn)換,并可以使用不同的時(shí)區(qū)。代碼的最后一部分還演示了如何將給定的日期時(shí)間對象轉(zhuǎn)換為本地時(shí)區(qū)。此示例顯示了日本和德國的時(shí)區(qū)代碼,對于其他地區(qū),您可以在此處參考。
片段2的輸出
3.使用interval比較兩個(gè)datetime(s)
有時(shí)我們必須有條件地比較兩個(gè)日期時(shí)間。想象一下,您有兩個(gè)數(shù)據(jù)框,第一個(gè)數(shù)據(jù)框僅包含一列日期時(shí)間,第二個(gè)數(shù)據(jù)框包含兩列表示間隔和其余列中的其他信息。您的目標(biāo)是從第一個(gè)數(shù)據(jù)幀中找到匹配的日期時(shí)間,如果它落在第二個(gè)數(shù)據(jù)幀的間隔內(nèi),如果是,則復(fù)制其他列。
實(shí)現(xiàn)此目的的一種方法是使用 pd.Interval 壓縮兩個(gè)日期時(shí)間的間隔,然后將它們分配為數(shù)據(jù)框的索引,稍后可用于有條件地比較和映射日期時(shí)間。如果滿足時(shí)間條件,這可以通過使用 for 循環(huán)復(fù)制感興趣的列來完成。
原文:https://towardsdatascience.com/how-to-work-with-datetime-in-python-26d4092dc484