本文將通過幾個例項,介紹pandas中Timestamp型別的基本用法。包括如何建立時間型別資料,如何從檔案中讀取時間型別資料以及如何將時間型別資料寫入檔案。
pandas支援使用多種不同的字串格式或資料型別建立Timestamp型別。下面我們透過一個程式來演示一下如何構造Timestamp變數。
構造Timestamp型別變數最簡單的方式就是直接把表示日期的字串(例如:2021-02-22)作為引數傳給pandas.Timestamp函式。原始碼的第17行,就是這種用法。
Timestamp函式也單獨提供了year, month, day引數,例如原始碼的第19行。
Timestamp也支援用Numpy的datetime64型別構造變數,例如原始碼的第21行,程式先用np.datetime64構造一個datetime64型別的變數,然後再用這個變數構造Timestamp型別的變數。
Timestamp可以使用datetime型別構造變數。原始碼的第23行,就是先用datetime庫的datetime函式構造一個datetime型別的變數,再用這個變數構造Timestamp型別變數。
如果我們想構造一個空值,在初始化時,應該使用pandas的NaT,演示語句為原始碼的第25行。
在實際工作中,我們更多的是從檔案中讀取時間變數,而不是自己構造變數。下面我們透過程式演示一下從Excel中讀取時間變數的方法。首先我們看一下準備讀取的excel檔案內容。
程式的原始碼如下所示:
在程式的第16行,我們使用read_excel函式就可以讀取Excel檔案。如果日期列比較規整,或者檔案比較小,我們直接讀取檔案就可以了。下圖為程式的執行結果:
Excel檔案中資料的第9行,客戶9的發放日期沒有內容,在讀取到DataFrame中時,pandas直接為我們設定為NaT。
這裡有一個地方需要重點關注一下,就是dtype引數。如果read_excel無法正確識別列的資料型別,我們可以直接使用dtype={u'發放日期': np.datetime64}指定資料型別。
下面我們演示一下讀取帶時間型別的csv檔案。
read_csv函式讀取csv檔案,與上面的read_excel類似。程式的第16行,我們指定了檔案的編碼格式為gbk。
唯一需要關注的還是日期型別的解析,如果欄位無法進行解析,就需要使用parse_dates引數,引數是一個列表,如果有多個欄位有問題,可以傳入多個值。列表中的值為欄位的順序,欄位是以0開始,像上面的例子,4的含義是發放日期是第5列。
最後我們再看一下如何寫入時間型別的資料。原始碼如下所示:
如果我們直接儲存excel檔案,我們會把年月日時分秒都儲存到檔案中。如下圖所示:
如果只想保留年月日,那我們可以把Timestamp物件轉換成date物件。原始碼的第36行,我們呼叫Timestamp的date函式,然後再儲存檔案時,將只會得到日期資料。