pandas處理時間序列(1)

微信公眾號:Python學(xué)習(xí)派

Pandas works with time series

Python最常用的數(shù)據(jù)處理方面的庫非pandas莫屬盅称,它是在金融建模的背景下發(fā)展起來的缩膝,因此包含相當(dāng)廣泛和使用的工具來處理dates, times和time-indexed數(shù)據(jù)疾层。這里我們將了解一下幾種:


Time stamps(時間戳)表示一個特定的時間贡避,比如2018,12,1 at 9:00 am


Time intervals(時間間隔)刮吧、periods(周期)表示一個開始和結(jié)束時間之間的特定長度,其中periods經(jīng)常用來表示一定長度的時間井厌,比如一天24小時


Time deltas(時間增量)旗笔、durations(期間)表示一個具體的時間長度,比如1小時


Date time and dateuil

在使用pandas之前拳魁,我們先簡單看一下python的內(nèi)置data time模塊以及第三方dateuil模塊對于時間的處理[1]潘懊。


1from datatime import datatime

2datatime(year = 2015, month = 7, day = 4)

3>>> out: datetime.datetime(2015, 7, 4, 0, 0)

1from dateutil import parser

2date = parser.parse("4th of July, 2015")

3date

4>>> out: datetime.datetime(2015, 7, 4, 0, 0)

5# 輸出day of week

6date.strftime('%A')

7>>> out: 'Saturday'

對于標(biāo)準(zhǔn)的字符串格式代碼贿衍,你可以參考https://docs.python.org/3/library/datetime.html


NumPy's datetime64

datetime和dateutil的強大之處在于它們的靈活性和簡單的語法:我們可以可以使用這些對象及其內(nèi)置方法輕松執(zhí)行感興趣的幾乎任何操作贸辈。它們所不擅長的地方是使用大型數(shù)組的日期和時間擎淤。因此對于這方面的缺陷,NnmPy的datetime64則有所彌補嘴拢,datetime64要求一個具體的輸入格式,比如:


1import numpy as np

2date = np.array('2018-12-01', dtype = np.datetime64)

3date

4>>> out: array('2018-12-01', dtype='datetime64[D]')

這里我們同樣也可以vectorized operations:


1date + np.arange(3)

2>>> out: array(['2018-12-01', '2018-12-02', '2018-12-03'], dtype='datetime64[D]')

很顯然赌结,正因為其名字為datetime64孝冒,其精度也被限制在64位庄涡,因此最多為時間存儲單元的倍啼染。下面列出一部分的時間跨度:


code Meaning Time span(absolute)

Y Year [9.2e18 BC, 9.2e18 AD]

M Month [7.6e17 BC, 7.6e17 AD]

W Week [1.7e17 BC, 1.7e17 AD]

更多的信息可以參考https://docs.scipy.org/doc/numpy/reference/arrays.datetime.html


雖然datetime64數(shù)據(jù)類型解決了內(nèi)置Python日期時間類型的一些缺點,但它缺少datetime提供的許多方便的方法和函數(shù)卦洽,尤其是dateutil阀蒂。


Pandas

下面終于到了我們的重頭戲,既然內(nèi)置的模塊或多或少都有一些不足酗失,那么pandas則很好的將它們的優(yōu)點結(jié)合起來昧绣,形成了一個強大的處理時間序列數(shù)據(jù)的工具夜畴。

先來看一些簡單的例子:


1import pandas as pd

2date = pd.to_datetime('4th of July, 2015')

3date

4>>> out: Timestamp('2015-07-04 00:00:00')

5date.strftime('%A')

6>>> out: 'Saturday'

7date + pd.to_timedelta(np.arange(3), 'D')

8>>> out: DatetimeIndex(['2015-07-04', '2015-07-05', '2015-07-06'], dtype='datetime64[ns]', freq=None)

很明顯贪绘,它已經(jīng)做到了綜合datetime, dateuil以及datetime64的優(yōu)點。


Index by time

從上面的例子中我們可以看到均函,pandas對于時間的處理是以timestamps作為index的边酒,請看下面的例子:


1index = pd.DatetimeIndex(['2018-1-1', '2018-2-1', '2018-3-1', '2018-4-1'])

2data = pd.Series([0, 1, 2, 3], index = index)

3data

4>>> out: 2018-01-01? ? 0

52018-02-01? ? 1

62018-03-01? ? 2

72018-04-01? ? 3

8dtype: int64

9# 使用index

10data['2018-1-1':'2018-3-1']

11>>> out: 2018-01-01? ? 0

122018-02-01? ? 1

132018-03-01? ? 2

14dtype: int64

15# 更進(jìn)一步的

16data['2018']

17>>> out: 2018-01-01? ? 0

182018-02-01? ? 1

192018-03-01? ? 2

202018-04-01? ? 3

21dtype: int64

Pandas time series data structures

最開始我們已經(jīng)介紹了一些常用的時間格式坯认,對于這些pandas都提供了相應(yīng)的處理方式,來看一些簡單的例子:


1dates = pd.to_datetime([datetime(2018, 12, 1), '2th of Dec, 2018', '2018-Dec-3', '04-12-2018', '20181205'])

2dates

3>>> out: DatetimeIndex(['2018-12-01', '2018-12-02', '2018-12-03', '2018-04-12',

4? ? ? ? ? ? ? '2018-12-05'],

5? ? ? ? ? ? ? dtype='datetime64[ns]', freq=None)

6#將DatetimeIndex轉(zhuǎn)化為PeriodIndex

7dates.to_period('D')

8>>> out: PeriodIndex(['2018-12-01', '2018-12-02', '2018-12-03', '2018-04-12',

9? ? ? ? ? ? '2018-12-05'],

10? ? ? ? ? ? dtype='period[D]', freq='D')

11#timedelta操作

12dates - dates[0]

13>>> out: TimedeltaIndex(['0 days', '1 days', '2 days', '-233 days', '4 days'], dtype='timedelta64[ns]', freq=None)

在numpy中陋气,我們有各種各樣構(gòu)建隨機(jī)序列巩趁、順序序列的方法淳附,在pandas中對于時間序列來說也有同樣的操作奴曙。


1pd.date_range('2018-12-1', '2018-12-7')

2>>> out: DatetimeIndex(['2018-12-01', '2018-12-02', '2018-12-03', '2018-12-04',

3? ? ? ? ? ? ? '2018-12-05', '2018-12-06', '2018-12-07'],

4? ? ? ? ? ? ? dtype='datetime64[ns]', freq='D')

5# 也可以這樣

6pd.date_range('2018-12-1', periods = 7)

7>>> out: DatetimeIndex(['2018-12-01', '2018-12-02', '2018-12-03', '2018-12-04',

8? ? ? ? ? ? ? '2018-12-05', '2018-12-06', '2018-12-07'],

9? ? ? ? ? ? ? dtype='datetime64[ns]', freq='D')

10#同時你還可以通過更改freq來表示不同的間隔别凹,其中Y表示year,M表示month洽糟,D表示day以此類推

11pd.date_range('2018-12-1', periods = 7, freq = 'H')

12>>> out: DatetimeIndex(['2018-12-01 00:00:00', '2018-12-01 01:00:00',

13? ? ? ? ? ? ? '2018-12-01 02:00:00', '2018-12-01 03:00:00',

14? ? ? ? ? ? ? '2018-12-01 04:00:00', '2018-12-01 05:00:00',

15? ? ? ? ? ? ? '2018-12-01 06:00:00'],

16? ? ? ? ? ? ? dtype='datetime64[ns]', freq='H')

關(guān)于pandas對于時間序列的處理就先介紹到這了炉菲,更加深入的學(xué)習(xí)請移步第二篇Pandas處理時間序列數(shù)據(jù)(2)


[1]: >>> out: 表示上一步的輸出結(jié)果





微信掃一掃

關(guān)注該公眾號

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堕战,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拍霜,更是在濱河造成了極大的恐慌嘱丢,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祠饺,死亡現(xiàn)場離奇詭異越驻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)吠裆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門伐谈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來试疙,“玉大人履澳,你說我怎么就攤上這事≈一龋” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵配阵,是天一觀的道長棋傍。 經(jīng)常有香客問我,道長拂铡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘陆错。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乏奥,像睡著了一般恨诱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厕鹃,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天忆矛,我揣著相機(jī)與錄音,去河邊找鬼亚兄。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播临谱,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抵拘?” 一聲冷哼從身側(cè)響起尚蝌,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泪电,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔬捷,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嵌屎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年喉镰,在試婚紗的時候發(fā)現(xiàn)自己被綠了沉噩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畜眨。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡氓侧,死狀恐怖载庭,靈堂內(nèi)的尸體忽然破棺而出顽铸,到底是詐尸還是另有隱情践剂,我是刑警寧澤鬼譬,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布演怎,位于F島的核電站爷耀,受9級特大地震影響歹叮,放射性物質(zhì)發(fā)生泄漏盗胀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惫确。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灯帮。三九已至崖技,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钟哥,已是汗流浹背迎献。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留腻贰,地道東北人吁恍。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像播演,于是被迫代替她去往敵國和親冀瓦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354