python時(shí)間日期函數(shù)與利用pandas進(jìn)行時(shí)間序列處理詳解
python標(biāo)準(zhǔn)庫(kù)包含于日期(date)和時(shí)間(time)數(shù)據(jù)的數(shù)據(jù)類(lèi)型,datetime、time以及calendar模塊會(huì)被經(jīng)常用到。
datetime以毫秒形式存儲(chǔ)日期和時(shí)間,datetime.timedelta表示兩個(gè)datetime對(duì)象之間的時(shí)間差。
下面我們先簡(jiǎn)單的了解下python日期和時(shí)間數(shù)據(jù)類(lèi)型及工具
給datetime對(duì)象加上或減去一個(gè)或多個(gè)timedelta,會(huì)產(chǎn)生一個(gè)新的對(duì)象
from datetime import datetime from datetime import timedelta now = datetime.now() now datetime.datetime(2017, 6, 27, 15, 56, 56, 167000) datetime參數(shù):datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]) delta = now - datetime(2017,6,27,10,10,10,10) delta datetime.timedelta(0, 20806, 166990) delta.days 0 delta.seconds 20806 delta.microseconds 166990
datetime模塊中的數(shù)據(jù)類(lèi)型
類(lèi)型 | 說(shuō)明 |
---|---|
date | 以公歷形式存儲(chǔ)日歷日期(年、月、日) |
time | 將時(shí)間存儲(chǔ)為時(shí)、分、秒、毫秒 |
datetime | 存儲(chǔ)日期和時(shí)間 |
timedelta | 表示兩個(gè)datetime值之間的差(日、秒、毫秒) |
字符串和datetime的相互轉(zhuǎn)換
1)python標(biāo)準(zhǔn)庫(kù)函數(shù)
日期轉(zhuǎn)換成字符串:利用str 或strftime
字符串轉(zhuǎn)換成日期:datetime.strptime
stamp = datetime(2017,6,27) str(stamp) '2017-06-27 00:00:00' stamp.strftime('%y-%m-%d')#%Y是4位年,%y是2位年 '17-06-27' #對(duì)多個(gè)時(shí)間進(jìn)行解析成字符串 date = ['2017-6-26','2017-6-27'] datetime2 = [datetime.strptime(x,'%Y-%m-%d') for x in date] datetime2 [datetime.datetime(2017, 6, 26, 0, 0), datetime.datetime(2017, 6, 27, 0, 0)]
2)第三方庫(kù)dateutil.parser的時(shí)間解析函數(shù)
from dateutil.parser import parse parse('2017-6-27') datetime.datetime(2017, 6, 27, 0, 0) parse('27/6/2017',dayfirst =True) datetime.datetime(2017, 6, 27, 0, 0)
3)pandas處理成組日期
pandas通常用于處理成組日期,不管這些日期是DataFrame的軸索引還是列,to_datetime方法可以解析多種不同的日期表示形式。
date ['2017-6-26', '2017-6-27'] import pandas as pd pd.to_datetime(date) DatetimeIndex(['2017-06-26', '2017-06-27'], dtype='datetime64[ns]', freq=None)
datetime 格式定義
代碼 | 說(shuō)明 |
---|---|
%Y | 4位數(shù)的年 |
%y | 2位數(shù)的年 |
%m | 2位數(shù)的月[01,12] |
%d | 2位數(shù)的日[01,31] |
%H | 時(shí)(24小時(shí)制)[00,23] |
%l | 時(shí)(12小時(shí)制)[01,12] |
%M | 2位數(shù)的分[00,59] |
%S | 秒[00,61]有閏秒的存在 |
%w | 用整數(shù)表示的星期幾[0(星期天),6] |
%F | %Y-%m-%d簡(jiǎn)寫(xiě)形式例如,2017-06-27 |
%D | %m/%d/%y簡(jiǎn)寫(xiě)形式 |
pandas時(shí)間序列基礎(chǔ)以及時(shí)間、日期處理
pandas最基本的時(shí)間序列類(lèi)型就是以時(shí)間戳(時(shí)間點(diǎn))(通常以python字符串或datetime對(duì)象表示)為索引的Series:
dates = ['2017-06-20','2017-06-21',\ '2017-06-22','2017-06-23','2017-06-24','2017-06-25','2017-06-26','2017-06-27'] import numpy as np ts = pd.Series(np.random.randn(8),index = pd.to_datetime(dates)) ts 2017-06-20 0.788811 2017-06-21 0.372555 2017-06-22 0.009967 2017-06-23 -1.024626 2017-06-24 0.981214 2017-06-25 0.314127 2017-06-26 -0.127258 2017-06-27 1.919773 dtype: float64 ts.index DatetimeIndex(['2017-06-20', '2017-06-21', '2017-06-22', '2017-06-23', '2017-06-24', '2017-06-25', '2017-06-26', '2017-06-27'], dtype='datetime64[ns]', freq=None)
pandas不同索引的時(shí)間序列之間的算術(shù)運(yùn)算會(huì)自動(dòng)按日期對(duì)齊
ts[::2]#從前往后每隔兩個(gè)取數(shù)據(jù) 2017-06-20 0.788811 2017-06-22 0.009967 2017-06-24 0.981214 2017-06-26 -0.127258 dtype: float64 ts[::-2]#從后往前逆序每隔兩個(gè)取數(shù)據(jù) 2017-06-27 1.919773 2017-06-25 0.314127 2017-06-23 -1.024626 2017-06-21 0.372555 dtype: float64 ts + ts[::2]#自動(dòng)數(shù)據(jù)對(duì)齊 2017-06-20 1.577621 2017-06-21 NaN 2017-06-22 0.019935 2017-06-23 NaN 2017-06-24 1.962429 2017-06-25 NaN 2017-06-26 -0.254516 2017-06-27 NaN dtype: float64
索引為日期的Series和DataFrame數(shù)據(jù)的索引、選取以及子集構(gòu)造
方法:
1).index[number_int]
2)[一個(gè)可以被解析為日期的字符串]
3)對(duì)于,較長(zhǎng)的時(shí)間序列,只需傳入‘年'或‘年月'可返回對(duì)應(yīng)的數(shù)據(jù)切片
4)通過(guò)時(shí)間范圍進(jìn)行切片索引
ts 2017-06-20 0.788811 2017-06-21 0.372555 2017-06-22 0.009967 2017-06-23 -1.024626 2017-06-24 0.981214 2017-06-25 0.314127 2017-06-26 -0.127258 2017-06-27 1.919773 dtype: float64 ts[ts.index[2]] 0.0099673896063391908 ts['2017-06-21']#傳入可以被解析成日期的字符串 0.37255538918121028 ts['21/06/2017'] 0.37255538918121028 ts['20170621'] 0.37255538918121028 ts['2017-06']#傳入年或年月 2017-06-20 0.788811 2017-06-21 0.372555 2017-06-22 0.009967 2017-06-23 -1.024626 2017-06-24 0.981214 2017-06-25 0.314127 2017-06-26 -0.127258 2017-06-27 1.919773 dtype: float64 ts['2017-06-20':'2017-06-23']#時(shí)間范圍進(jìn)行切片 2017-06-20 0.788811 2017-06-21 0.372555 2017-06-22 0.009967 2017-06-23 -1.024626 dtype: float64
帶有重復(fù)索引的時(shí)間序列
1).index.is_unique檢查索引日期是否是唯一的
2)對(duì)非唯一時(shí)間戳的數(shù)據(jù)進(jìn)行聚合,通過(guò)groupby,并傳入level = 0(索引的唯一一層)
dates = pd.DatetimeIndex(['2017/06/01','2017/06/02','2017/06/02','2017/06/02','2017/06/03']) dates DatetimeIndex(['2017-06-01', '2017-06-02', '2017-06-02', '2017-06-02', '2017-06-03'], dtype='datetime64[ns]', freq=None) dup_ts = pd.Series(np.arange(5),index = dates) dup_ts 2017-06-01 0 2017-06-02 1 2017-06-02 2 2017-06-02 3 2017-06-03 4 dtype: int32 dup_ts.index.is_unique False dup_ts['2017-06-02'] 2017-06-02 1 2017-06-02 2 2017-06-02 3 dtype: int32 grouped = dup_ts.groupby(level=0).mean() grouped 2017-06-01 0 2017-06-02 2 2017-06-03 4 dtype: int32 dup_df = pd.DataFrame(np.arange(10).reshape((5,2)),index = dates ) dup_df
0 | 1 | |
---|---|---|
2017-06-01 | 0 | 1 |
2017-06-02 | 2 | 3 |
2017-06-02 | 4 | 5 |
2017-06-02 | 6 | 7 |
2017-06-03 | 8 | 9 |
grouped_df = dup_df.groupby(level=0).mean()##針對(duì)DataFrame grouped_df
0 | 1 | |
---|---|---|
2017-06-01 | 0 | 1 |
2017-06-02 | 4 | 5 |
2017-06-03 | 8 | 9 |
本文總結(jié)了以下4個(gè)知識(shí)點(diǎn)
1)字符串、日期的轉(zhuǎn)換方法
2)日期和時(shí)間的主要python,datetime、timedelta、pandas.to_datetime等
3)以時(shí)間為索引的Series和DataFrame的索引、切片
4)帶有重復(fù)時(shí)間索引時(shí)的索引,.groupby(level=0)應(yīng)用
相關(guān)文章
pytorch-神經(jīng)網(wǎng)絡(luò)擬合曲線實(shí)例
今天小編就為大家分享一篇pytorch-神經(jīng)網(wǎng)絡(luò)擬合曲線實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01pytorch實(shí)現(xiàn)mnist分類(lèi)的示例講解
今天小編就為大家分享一篇pytorch實(shí)現(xiàn)mnist分類(lèi)的示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01python查找特定名稱(chēng)文件并按序號(hào)、文件名分行打印輸出的方法
這篇文章主要介紹了python查找特定名稱(chēng)文件并按序號(hào)、文件名分行打印輸出的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04PyTorch實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別的示例代碼
本文主要介紹了PyTorch實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>2022-05-05pandas實(shí)現(xiàn)datetime64與unix時(shí)間戳互轉(zhuǎn)
這篇文章主要介紹了pandas實(shí)現(xiàn)datetime64與unix時(shí)間戳互轉(zhuǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07個(gè)人微信公眾號(hào)接入ChatGPT的教程分享
這篇文章主要為大家詳細(xì)介紹了如何為個(gè)人微信公眾號(hào)接入ChatGPT,文中的實(shí)現(xiàn)步驟講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-05-05pytorch?rpc實(shí)現(xiàn)分物理機(jī)器實(shí)現(xiàn)model?parallel的過(guò)程詳解
這篇文章主要介紹了pytorch?rpc實(shí)現(xiàn)分物理機(jī)器實(shí)現(xiàn)model?parallel的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05分析用Python腳本關(guān)閉文件操作的機(jī)制
這篇文章主要介紹了分析用Python腳本關(guān)閉文件操作的機(jī)制,作者分Python2.x版本和3.x版本兩種情況進(jìn)行了闡述,需要的朋友可以參考下2015-06-06