數(shù)據(jù)分析師-pandas時間模塊datetime

主要:datetime.date()、datetime.datetime()虱痕、datetime.timedelta()

日期解析方法:parser.parse

一、時間模塊 import datetime

1.datetime.date:date對象,date是datetime中的方法

(1)datetime.date.today()#today()會根據(jù)日期的變化輸出今天的日期,返回的是datetime.date類忘古,例如:想把一個月數(shù)據(jù)聚合成四周的產(chǎn)量--如果是str需要手動按照七天間隔路操,而datetime.date可以直接用來做

(2)datetime.date(2018,10,1)

2.datetime.datetime:直接生成時間戳

(1)datetime.datetime.now()#返回今天的年月日時分秒疾渴,返回的是datetime.datetime類

(2)datetime.datetime類相減得到相差的時間,返回的是datetime.timedelta時間差類

3.datetime.timedelta:時間差,默認是天

datetime.timedelta(100,3600)#時間差為100天+3600秒

4.日期和字符串轉換方法:parser.parse,可以識別任何相似于時間的字符串

from dateutil.parser import parse

print(parse('2000-11-1'))

print(parse('11/11/2000'))

print(parse('5/1/2018',dayfirst = True))#dayfirst為True可以設置日在月之前

print(parse('Jan 31,1997 10:45PM'))

#各種格式都可以判斷屯仗,但不能出現(xiàn)中文

二搞坝、pandas里的時刻數(shù)據(jù):pd.Timestamp

1. 時刻數(shù)據(jù)代表時間點,是pd的數(shù)據(jù)類型魁袜;pd.Timestamp():時間點可以是一個月 一分鐘 一秒,直接生成pandas的時刻數(shù)據(jù)--即時間戳桩撮,類型為pandas.Timestamp

注意:只適用于單個時間

2.pd.to_datetime():多個時間數(shù)據(jù)轉換時間戳索引pandas的DatetimeIndex,單個時間數(shù)據(jù)轉換成Timestamp

t3 = ['2017-10-20','2017-10-20','2017-10-20','2017-10-20']

(1)當為多個時間數(shù)據(jù)時峰弹,返回DatetimeIndex時間序列標簽類店量,可以變成Series的index

(2)當一組時間序列中有其他格式數(shù)據(jù),會報錯鞠呈;也可以用errors='ignore'參數(shù)返回原始輸入融师,生成一般的數(shù)組;errors='coerce'參數(shù)返回datetimeIndex,并變?yōu)槿笔е礜aT

(3)print(pd.Timestamp(t3),type(t3))#會報錯

三蚁吝、pandas時戳索引

pd.DatetimeIndex()時間戳索引:直接把時間序列變成時間戳索引

rng[0]#按照索引生成時間戳Timestamp

** TimeSeries時間序列:以DatetimeIndex的index的Series旱爆,為TimeSeries,時間序列

四窘茁、pd.date_range()日期范圍/工作日pd.bdate_range

pd.date_range(start開始時間怀伦,end結束時間,periods時期山林,freq默認頻率day房待,normalize=True把時間歸為凌晨零點)

2種生成方式:start+end or start/end+periods

例如:rng1 = pd.date_range('1/1/2017','1/10/2017')

rng2 = pd.date_range(start = '1/1/2017',periods =10,freq = 'H')#freq='H'按小時

print(pd.date_range('1/1/2017','1/11/2017',closed='right'))closed:默認為左閉右閉;left為左閉右開捌朴;right為左開右閉

注意:由于date_range返回的是DatetimeIndex類吴攒,當被list后返回的是一個個的時間戳Timestamp(pandas中精度最小的時間單位)

五、afreq:時期頻率的轉換

ts = pd.Series(np.random.rand(4),index=pd.date_range('20170101','20170104'))

print(ts.asfreq('4H',method='ffill'))#method參數(shù):插值 ffill用之前的填充 bfill用之后的填充

六砂蔽、pd.date_range()超前和滯后

ts = pd.Series(np.random.rand(4),index=pd.date_range('20170101','20170104'))

print(ts.shift(2))#.shift(正數(shù)):向后移

print(ts.shift(-2))#.shift(負數(shù)):向前移

#意義:比如有十天的營收數(shù)據(jù)洼怔,想看當天比前一天的漲跌情況,得到的負數(shù)就是跌了,正數(shù)就是漲了

per? = ts/ts.shift(1)-1

#加上freq參數(shù)左驾,多時間戳進行位移镣隶,而不僅對數(shù)值進行位移=D按照天极谊,=T按照小時

print(ts.shift(2,freq = 'D'))、print(ts.shift(2,freq = 'T'))

七安岂、pandas的時期pd.period()

1.pd.Period() 類似于DatatimeIndex時間戳:

p = pd.Period('2017',freq='M')生成以2017-01開始轻猖,月為頻率的時間構造器;freq指明period長度域那,時間戳則說明該period在時間軸上的位置

注意:print(p+1)#按照freq進行運算

2.pd.period_range()類似于date_range()時間戳

prng = pd.period_range('1/1/2011','1/1/2013',freq='M')生成的按月 2011-01咙边,數(shù)據(jù)格式為PeriodIndex,單個數(shù)值為Period

rng = pd.date_range('1/1/2011','1/1/2013',freq='M')生成的按天2011-01-01

3.asfreq頻率轉換

p = pd.Period('2017','A-DEC')--每年制定月份的最后一個日歷日所在的年次员,變?yōu)镸/D

print(p.asfreq('M',how='start'))#how參數(shù)=start以開始败许,=end以結束 print(p.asfreq('D',how='end'))

ts2 = pd.Series(np.random.rand(len([prng])),

? ? ? ? ? ? ? index=prng.asfreq('D',how='end'))#asfreq也可以轉換TimeSeries的index

4.時間戳DatatimeIndex與時期Period的轉換:pd.to_period()/pd.timestamp()

ts1.to_period()、ts2.to_timestamp()

八淑蔚、時間序列的重采樣

將時間序列的一個頻率轉換成另一個頻率市殷,且會有數(shù)據(jù)的結合

降采樣:高頻數(shù)據(jù)-低頻數(shù)據(jù),eg以天為頻率的數(shù)據(jù)轉換為以月為頻率的數(shù)據(jù)

升采樣:低頻數(shù)據(jù)-高頻數(shù)據(jù)刹衫,eg以年為頻率的數(shù)據(jù)轉換為以月為頻率的數(shù)據(jù)?

1.降采樣:需要聚合

ts.resample('5D') #得到重采樣的構建器DatetimeIndexResampler醋寝,是個中間值,需要指示聚合方式带迟,頻率為5天

ts_re2 = ts.resample('5D',closed='left',label='right').sum()#重采樣的最終值音羞,得到聚合后的Series;

label:重采樣后以那個標簽為索引,默認寫left邮旷;closed:默認左閉右閉

聚合方法:

print(ts.resample('5D').sum())#均值

print(ts.resample('5D').max())#最大值

print(ts.resample('5D').min())#最小值

print(ts.resample('5D').median())#中值

print(ts.resample('5D').first())#第一個值

print(ts.resample('5D').last())#第二個值

print(ts.resample('5D').ohlc())#OHLC重采樣:open開盤 high最大值 low最小值 close收盤-金融

2.升采樣:需要填充

ts.resample('15T').asfreq() #不做填充黄选,返回NaN

ts.resample('15T').ffill()/bfill():上填充和下填充

九蝇摸、時間序列中的索引和切片

1.索引:方法與DataFrame和Series相似--只要能表示時間的都可以拿來做標簽的索引下標索引和標簽索引

2.切片:下標切片婶肩,類似Series,左閉右開貌夕;標簽切片律歼,左閉右閉;#標簽切片只寫月會出現(xiàn)月的所有日

3.重復索引的時間序列 .is_unique值是否唯一啡专,index.is_unique判斷index是否唯一,返回True和False险毁,可以用來做布爾型索引

總結:pandas的時間模塊

pd.Timestamp():單數(shù)據(jù)時間戳

pd.to_datetime():多數(shù)據(jù)的時間戳

pd.DatatimeIndex():多數(shù)據(jù)的時間戳,可以作為Series的index们童;還可以索引

在沒有現(xiàn)成時間數(shù)據(jù)情況下:pd.date_range()日期范圍

附:pd.date_range():日期范圍一講畔况,頻率freq

# print(pd.date_range('2017/1/1','2017/1/4'))#默認freq='D',每日歷日

# print(pd.date_range('2017/1/1','2017/1/4',freq='B'))#freq='B',每工作日

# print(pd.date_range('2017/1/1','2017/1/4',freq='H'))#freq='H',每小時

# print(pd.date_range('2017/1/1 12:00','2017/1/4 12:10',freq='T'))#freq='T/MIN',每分鐘

# print(pd.date_range('2017/1/1 12:00:00','2017/1/4 12:10:10',freq='S'))#freq='S',每秒

# print(pd.date_range('2017/1/1 12:00','2017/1/4 12:10',freq='L'))#freq='L',每毫秒

# print(pd.date_range('2017/1/1 12:00','2017/1/4 12:10',freq='U'))#freq='U',每微秒

print(pd.date_range('2017/1/1','2017/1/4',freq='W-MON'))

# W-MON從指定星期幾開始算起,每周

print(pd.date_range('2017/1/1','2018/1/4',freq='WOM-2MON'))

# WOM-nMON,每月的第幾個星期幾開始算

# 時間序列:DatimeIndex與TimeSeries

pd.date_range()-日期范圍二講慧库,頻率

print(pd.date_range('2017','2018',freq='M'))

print(pd.date_range('2017','2020',freq='Q-MAY'))

print(pd.date_range('2017','2018',freq='A-DEC'))

print('--'*20)

#M:每月最后一個日歷日

#Q-月:指定月為季度末跷跪,每個季度末最后一月的最后一個日歷日

#A-月:每年制定月份的最后一個日歷日

#月編寫:JAN

#所以Q-月只有三種情況:1-4-7-10,2-5-8-11齐板,3-6-9-12

print(pd.date_range('2017','2018', freq = 'BM'))?

print(pd.date_range('2017','2020', freq = 'BQ-DEC'))?

print(pd.date_range('2017','2020', freq = 'BA-DEC'))

print('------')

# BM:每月最后一個工作日

# BQ-月:指定月為季度末吵瞻,每個季度末最后一月的最后一個工作日

# BA-月:每年指定月份的最后一個工作日

print(pd.date_range('2017','2018', freq = 'MS'))?

print(pd.date_range('2017','2020', freq = 'QS-DEC'))?

print(pd.date_range('2017','2020', freq = 'AS-DEC'))

print('------')

# M:每月第一個日歷日

# Q-月:指定月為季度末葛菇,每個季度末最后一月的第一個日歷日

# A-月:每年指定月份的第一個日歷日

print(pd.date_range('2017','2018', freq = 'BMS'))?

print(pd.date_range('2017','2020', freq = 'BQS-DEC'))?

print(pd.date_range('2017','2020', freq = 'BAS-DEC'))

print('------')

# BM:每月第一個工作日a

# BQ-月:指定月為季度末,每個季度末最后一月的第一個工作日

# BA-月:每年指定月份的第一個工作日

pd.date_range()-日期范圍橡羞,復合頻率

print(pd.date_range('2017/1/1','2017/2/1',freq='7D'))# 7天

print(pd.date_range('2017/1/1','2017/2/1',freq='2h30min'))# 2.5小時

print(pd.date_range('2017/1/1','2018/2/1',freq='2MS'))#每間隔2個月眯停,每月第一個日歷日

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卿泽,隨后出現(xiàn)的幾起案子莺债,更是在濱河造成了極大的恐慌,老刑警劉巖签夭,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件九府,死亡現(xiàn)場離奇詭異,居然都是意外死亡覆致,警方通過查閱死者的電腦和手機侄旬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煌妈,“玉大人儡羔,你說我怎么就攤上這事¤邓校” “怎么了汰蜘?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長之宿。 經(jīng)常有香客問我族操,道長,這世上最難降的妖魔是什么比被? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任色难,我火速辦了婚禮,結果婚禮上等缀,老公的妹妹穿的比我還像新娘枷莉。我一直安慰自己,他們只是感情好尺迂,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布笤妙。 她就那樣靜靜地躺著,像睡著了一般噪裕。 火紅的嫁衣襯著肌膚如雪蹲盘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天膳音,我揣著相機與錄音召衔,去河邊找鬼。 笑死严蓖,一個胖子當著我的面吹牛薄嫡,可吹牛的內容都是我干的氧急。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毫深,長吁一口氣:“原來是場噩夢啊……” “哼吩坝!你這毒婦竟也來了?” 一聲冷哼從身側響起哑蔫,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钉寝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闸迷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嵌纲,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年腥沽,在試婚紗的時候發(fā)現(xiàn)自己被綠了逮走。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡今阳,死狀恐怖师溅,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情盾舌,我是刑警寧澤墓臭,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站妖谴,受9級特大地震影響窿锉,放射性物質發(fā)生泄漏。R本人自食惡果不足惜膝舅,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一嗡载、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铸史,春花似錦鼻疮、人聲如沸怯伊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耿芹。三九已至崭篡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吧秕,已是汗流浹背琉闪。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留砸彬,地道東北人颠毙。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓斯入,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蛀蜜。 傳聞我的和親對象是個殘疾皇子刻两,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容

  • # -*- coding: utf-8 -*- from __future__ import division f...
    小豆角lch閱讀 908評論 0 1
  • 昨天睡了一天,是頭暈的那種滴某,然后也沒心思來做筆記磅摹,沒心思來看書,其實霎奢,我知道户誓,或許我現(xiàn)在做的只是在轉移一種矛盾,可...
    六六的建斌閱讀 822評論 0 0
  • 時間序列簡介 時間序列分析是數(shù)據(jù)分析過程中幕侠,尤其是在金融數(shù)據(jù)分析過程中會經(jīng)常遇到的帝美。時間序列,就是以時間排序的一組...
    Alex_楊策閱讀 1,733評論 0 1
  • 太忙晤硕,好久不寫筆記了证舟。這兩天有空,把該整理的好好整理一下窗骑。 一女责、datetime庫 2017-06-07 23:1...
    哈勞斯軍士閱讀 943評論 1 3
  • 老何一家是外地人,在S城市的郊區(qū)做小本生意创译。幾年前他攢了點積蓄抵知,在小趙村買了五間平方還帶一個院子。沒有想到幾年后的...
    幡然一悟閱讀 362評論 0 1