8.Python科學(xué)計(jì)算與數(shù)據(jù)處理課件(PPT 115頁(yè))_第1頁(yè)
8.Python科學(xué)計(jì)算與數(shù)據(jù)處理課件(PPT 115頁(yè))_第2頁(yè)
8.Python科學(xué)計(jì)算與數(shù)據(jù)處理課件(PPT 115頁(yè))_第3頁(yè)
8.Python科學(xué)計(jì)算與數(shù)據(jù)處理課件(PPT 115頁(yè))_第4頁(yè)
8.Python科學(xué)計(jì)算與數(shù)據(jù)處理課件(PPT 115頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩110頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1pandas入門第1頁(yè),共115頁(yè)。目錄pandas的數(shù)據(jù)結(jié)構(gòu)介紹SeriesDataFrame索引對(duì)象基本功能重新索引丟棄指定軸上的項(xiàng)索引、選取和過(guò)濾 算術(shù)運(yùn)算和數(shù)據(jù)對(duì)齊函數(shù)應(yīng)用和映射排序和排名帶有重復(fù)值的軸索引2第2頁(yè),共115頁(yè)。目錄匯總和計(jì)算描述統(tǒng)計(jì)相關(guān)系數(shù)與協(xié)方差唯一值、值計(jì)數(shù)以及成員資格處理缺失數(shù)據(jù)濾除缺失數(shù)據(jù)填充缺失數(shù)據(jù)層次化索引重排分級(jí)順序根據(jù)級(jí)別匯總統(tǒng)計(jì)使用DataFrame的列其他有關(guān)pandas的話題3第3頁(yè),共115頁(yè)。4 pandas含有使數(shù)據(jù)分析工作變得更快更簡(jiǎn)單的高級(jí)數(shù)據(jù)結(jié)構(gòu)和操作工具。它是基于NumPy構(gòu)建的,讓以NumPy為中心的應(yīng)用變得更加簡(jiǎn)單。 因?yàn)镾e

2、ries和DataFrame用的次數(shù)非常多,所以將其引入本地命名空間中會(huì)更方便。from pandas import Series, DataFrame import pandas as pd第4頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹Series Series是一種類似于一維數(shù)組的對(duì)象,它由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)以及一組 與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成。僅由一組數(shù)據(jù)即可產(chǎn)生最簡(jiǎn)單的Series: 5obj = Series(4, 7, -5, 3)obj0 41 72 -53 3dtype: int64第5頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 Series的字符串表現(xiàn)形

3、式為:索引在左邊,值在右邊。由于沒(méi)有為數(shù)據(jù)指定索引, 于是會(huì)自動(dòng)創(chuàng)建一個(gè)0到N-1 (N為數(shù)據(jù)的長(zhǎng)度)的整數(shù)型索引。可以通過(guò)Series的 values和index屬性獲取其數(shù)組表示形式和索引對(duì)象: 6obj.valuesarray( 4, 7, -5, 3, dtype=int64)obj.indexInt64Index(0, 1, 2, 3, dtype=int64)第6頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 通常希望所創(chuàng)建的Series帶有一個(gè)可以對(duì)各個(gè)數(shù)據(jù)點(diǎn)進(jìn)行標(biāo)記的索引:7obj2 = Series(4, 7,-5,3, index=d,b,a,c)obj2d 4b 7a -5c

4、 3dtype: int64 obj2.indexIndex(ud, ub, ua, uc, dtype=object)第7頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 與普通NumPy數(shù)組相比,可以通過(guò)索引的方式選取Series中的單個(gè)或一組值:8obj2a-5obj2d= 6obj2c,a,dc 3a -5d 6dtype: int64第8頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 NumPy數(shù)組運(yùn)算(如根據(jù)布爾型數(shù)組進(jìn)行過(guò)濾、標(biāo)量乘法、應(yīng)用數(shù)學(xué)函數(shù)等)都會(huì)保留索引和值之間的鏈接:9obj2obj2obj2 0obj2*2np.exp(obj2)d 403.428793b 1096.6331

5、58a 0.006738c 20.085537dtype: float64第9頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 還可以將Series看成是一個(gè)定長(zhǎng)的有序字典,因?yàn)樗撬饕档綌?shù)據(jù)值的一個(gè)映射。它 可以用在許多原本需要字典參數(shù)的函數(shù)中:10b in obj2Truee in obj2False第10頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹11 如果數(shù)據(jù)被存放在一個(gè)Python字典中,也可以直接通過(guò)這個(gè)字典來(lái)創(chuàng)建Series:sdata = Ohio: 35000, Texas: 71000, Oregon: 16000, Utah: 5000obj3 = Series(sdata)o

6、bj3Ohio 35000Oregon 16000Texas 71000Utah 5000dtype: int64第11頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 如果只傳入一個(gè)字典,則結(jié)果Series中的索引就是原字典的鍵(有序排列)。 在例子中,sdata跟states索引相匹配的那3個(gè)值會(huì)被找出來(lái)并放到相應(yīng)的位置上, 但由于“California”所對(duì)應(yīng)的sdata值找不到,所以其結(jié)果就為NaN (即“非數(shù)字” (not a number). 12states = California, Ohio, Oregon, Texasobj4 = Series(sdata, index=stat

7、es)obj4 California NaNOhio 35000Oregon 16000Texas 71000dtype: float64第12頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 在pandas中使用 NaN表示缺失(missing) 或NA值。 pandas的isnull和notnull函數(shù)可用于檢測(cè)缺失數(shù)據(jù): 13pd.isnull(obj4) # Series也有類似的實(shí)例方法:California True #obj4.isnull()Ohio FalseOregon FalseTexas Falsedtype: bool pd.notnull(obj4)California

8、FalseOhio TrueOregon TrueTexas Truedtype: bool第13頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 對(duì)于許多應(yīng)用而言,Series域重要的一個(gè)功能是:它在算術(shù)運(yùn)算中會(huì)自動(dòng)對(duì)齊不同索引 的數(shù)據(jù)。 14 obj3 obj4obj3 + obj4California NaNOhio 70000Oregon 32000Texas 142000Utah NaNdtype: float64第14頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 Series對(duì)象本身及其索引都有一個(gè)name屬性,該屬性跟pandas其他的關(guān)鍵功能關(guān)系非常密切: 15 =

9、 = stateobj4stateCalifornia NaNOhio 35000Oregon 16000Texas 71000Name: population, dtype: float64第15頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹16 Series的索引可以通過(guò)賦值的方式就地修改:obj0 41 72 -53 3obj.index = Bob, Steve, Jeff, RyanobjBob 4Steve 7Jeff -5Ryan 3dtype: int64第16頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹17DataFrame Da

10、taFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值類 型(數(shù)值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個(gè)索引)。跟其他類似的數(shù)據(jù)結(jié)構(gòu)相比(如R的data. frame),DataFrame中面向行和面向列的操作基本上是平衡的。其實(shí),DataFrame中的 數(shù)據(jù)是以一個(gè)或多個(gè)二維塊存放的(而不是列表、字典或別的一維數(shù)據(jù)結(jié)構(gòu))。第17頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 構(gòu)建DataFrame的辦法有很多,最常用的一種是直接傳入一個(gè)由等長(zhǎng)列表或NumPy數(shù)組 組成的字典: 結(jié)果DataFrame會(huì)自

11、動(dòng)加上索引(跟Series一樣),且全部列會(huì)被有序悱列.18data=state:Ohio,Ohio,Ohio,Nevada,Nevada, year:2000, 2001, 2002, 2001, 2002, pop:1.5, 1.7, 3.6, 2.4, 2.9frame = DataFrame(data)frame第18頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 如果指定了列序列,則DataFrame的列就會(huì)按照指定順序迸行排列: 跟Series一樣,如果傳入的列在數(shù)據(jù)中找不到,就會(huì)產(chǎn)生NA值: 19DataFrame(data, columns=year, state, pop) fr

12、ame2=DataFrame(data, columns=year, state, pop, debt, index=one, two, three, four, five) frame2 frame2.columnsIndex(uyear, ustate, upop, udebt, dtype=object)第19頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 通過(guò)類似字典標(biāo)記的方式或?qū)傩缘姆绞?,可以將DataFrame的列獲取為一個(gè)Series:20frame2stateone Ohiotwo Ohiothree Ohiofour Nevadafive NevadaName: state, d

13、type: objectframe2.yearone 2000two 2001three 2002four 2001five 2002Name: year, dtype: int64第20頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 注意,返冋的Series擁有原DataFrame相同的索引,且其name屬性也已經(jīng)被相應(yīng)地設(shè)置 好了。行也可以通過(guò)位置或名稱的方式進(jìn)行獲取,比如用索引字段ix :21 frame2.ixthreeyear 2002state Ohiopop 3.6debt NaNName: three, dtype: object第21頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 列

14、可以通過(guò)賦值的方式進(jìn)行修改。例如,可以給那個(gè)空的“debt”列賦上一個(gè)標(biāo)量值或一組值:22frame2debt = 16.5frame2frame2debt = np.arange(5)frame2第22頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹23 將列表或數(shù)組賦值給某個(gè)列時(shí),其長(zhǎng)度必須跟DataFrame的長(zhǎng)度相匹配。如果賦值的是一個(gè)Series,就會(huì)精確匹配DataFrame的索引,所有的空位都將被填上缺失值: val = Series(-1.2, -1.5, -1.7, index= two, four, five)frame2debt = valframe2第23頁(yè),共115頁(yè)。pa

15、ndas的數(shù)據(jù)結(jié)構(gòu)介紹 為不存在的列賦值會(huì)創(chuàng)建出一個(gè)新列。關(guān)鍵字del用于刪除列:24 frame2eastern = frame2.state = Ohioframe2 del frame2easternframe2.columnsIndex(uyear, ustate, upop, udebt, dtype=object)第24頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 另一種常見(jiàn)的數(shù)據(jù)形式是嵌套字典(也就是字典的字典): 如果將它傳給DataFrame,它就會(huì)被解釋為:外層字典的鍵作為列,內(nèi)層鍵則作為行索引:25 pop = Nevada: 2001: 2.4, 2002: 2.9, O

16、hio: 2000: 1.5, 2001: 1.7, 2002:3.6 frame3 = DataFrame(pop)frame3 frame3.T #也可以對(duì)該結(jié)果進(jìn)行轉(zhuǎn)置第25頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 內(nèi)層字典的鍵會(huì)被合并、排序以形成最終的索引。如果顯式指定了索引,則不會(huì)這樣: 由Series組成的字典差不多也是一樣的用法: 26 DataFrame(pop, index=2001, 2002, 2003) frame3 pdata = Ohio: frame3Ohio:-1, Nevada: frame3Nevada:2DataFrame(pdata)第26頁(yè),共115

17、頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹27 如果設(shè)置了DataFrame的index和columns的name屬性,則這些信息也會(huì)被顯示出來(lái): 跟Series一樣,values屬性也會(huì)以二維ndarray的形式返回DataFrame中的數(shù)據(jù): = year; = stateframe3 = year; = stateframe3.valuesarray( nan, 1.5, 2.4, 1.7, 2.9, 3.6)第27頁(yè),共115頁(yè)。pandas的數(shù)據(jù)

18、結(jié)構(gòu)介紹28 如果DataFrame各列的數(shù)據(jù)類型不同,則值數(shù)組的數(shù)據(jù)類型就會(huì)選用能兼容所有列的數(shù) 據(jù)類型: frame2 frame2.valuesarray(2000L, Ohio, 1.5, nan, 2001L, Ohio, 1.7, -1.2, 2002L, Ohio, 3.6, nan, 2001L, Nevada, 2.4, -1.5, 2002L, Nevada, 2.9, -1.7, dtype=object)第28頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹索引對(duì)象 pandas的索引對(duì)象負(fù)責(zé)管理軸標(biāo)簽和其他元數(shù)據(jù)(比如軸名稱等)。構(gòu)建Series或 DataFrame時(shí),所

19、用到的任何數(shù)組或其他序列的標(biāo)簽都會(huì)被轉(zhuǎn)換成一個(gè)Index:29 obj = Series(range(3), index=a, b, c)index = obj.indexindexIndex(ua, ub, uc, dtype=object)index1:Index(ub, uc, dtype=object)第29頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 Index對(duì)象是不可修改的(immutable),因此用戶不能對(duì)其進(jìn)行修改: 不可修改性非常重要,因?yàn)檫@樣才能使Index對(duì)象在多個(gè)數(shù)據(jù)結(jié)構(gòu)之間安全共享:30 index1 = dTypeError: Indexes does not s

20、upport mutable operations index = pd.Index(np.arange(3)obj2 = Series(1.5, -2.5, 0, index=index)obj2.index is indexTrue第30頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 除了長(zhǎng)得像數(shù)組,Index的功能也類似一個(gè)固定大小的集合: 每個(gè)索引都有一些方法和屬性,它們可用于設(shè)置邏輯并回答有關(guān)該索引所包含的數(shù)據(jù)的 常見(jiàn)問(wèn)題。 31 frame3Ohio in frame3.columnsTrue2003 in frame3.indexFalse第31頁(yè),共115頁(yè)。pandas的數(shù)據(jù)結(jié)構(gòu)

21、介紹 32方法說(shuō)明append連接另一個(gè)Index對(duì)象,產(chǎn)生一個(gè)新的Indexdiff計(jì)算差集,并得到一個(gè)Indexintersection計(jì)算交集union計(jì)算并集isin計(jì)算一個(gè)指示各值是否都包含在參數(shù)集合中的布爾型數(shù)組delete刪除索引i處的元素,并得到新的Indexdrop刪除傳入的值,并得到新的Indexinsert將元素插入到索引i處,并得到新的Indexis_monotonic當(dāng)各元素均大于等于前一個(gè)元素時(shí),返回Trueis.unique當(dāng)Index沒(méi)有重復(fù)值時(shí),返回Trueunique計(jì)算Index中唯一值的數(shù)組Index的方法和屬性第32頁(yè),共115頁(yè)?;竟δ苤匦滤饕?p

22、andas對(duì)象的一個(gè)重要方法是reindex,其作用是創(chuàng)建一個(gè)適應(yīng)新索引的新對(duì)象。以之前 的一個(gè)簡(jiǎn)單示例來(lái)說(shuō):33obj = Series(4.5, 7.2, -5.3, 3.6, index=d, b, a, c) objd 4.5b 7.2a -5.3c 3.6dtype: float64第33頁(yè),共115頁(yè)?;竟δ?4 調(diào)用該Series的reindex將會(huì)根據(jù)新索引進(jìn)行重排。如果某個(gè)索引值當(dāng)前不存在,就引入缺失值:obj2 = obj.reindex(a, b, c, d, e)obj2a -5.3b 7.2c 3.6d 4.5e NaNobj.reindex(a, b, c, d,

23、 e, fill_value=0)Out126: a -5.3b 7.2c 3.6d 4.5e 0.0第34頁(yè),共115頁(yè)?;竟δ?對(duì)于時(shí)間序列這樣的有序數(shù)據(jù),重新索引時(shí)可能需要做一些插值處理。method選項(xiàng)即可 達(dá)到此目的,例如,使用ffill可以實(shí)現(xiàn)前向值填充:35 obj3 = Series(blue, purple, yellow, index=0, 2, 4)obj3.reindex(range(6), method=ffill)0 blue1 blue2 purple3 purple4 yellow5 yellowdtype: object第35頁(yè),共115頁(yè)?;竟δ?rei

24、ndex的(插值)method選項(xiàng) 對(duì)于DataFrame,reindex可以修改(行)索引、列,或兩個(gè)都修改。如果僅傳入一個(gè)序列,則會(huì)重新索引行:36參數(shù) 說(shuō)明ffill或pad 前向填充(或搬運(yùn))值bfill或backfill后向填充(或搬運(yùn))值 frame = DataFrame(np.arange(9).reshape(3, 3), index=a, c, d, columns= Ohio, Texas, California)frameframe2 = frame.reindex(a, b, c, d)frame2第36頁(yè),共115頁(yè)?;竟δ?7 使用columns關(guān)鍵字即可重新索

25、引列: 也可以同時(shí)對(duì)行和列進(jìn)行重新索引,而插值則只能按行應(yīng)用(即軸0): 利用ix的標(biāo)簽索引功能,重新索引任務(wù)可以變得更簡(jiǎn)潔: states=Texas, Utah, Californiaframe.reindex(columns=states) frame.reindex(index=a, b, c, d, method=ffill, columns=states) frame.ixa, b, c, d, states第37頁(yè),共115頁(yè)?;竟δ?reindex函數(shù)的參數(shù) 38參數(shù) 說(shuō)明index 用作索引的新序列。既可以是index實(shí)例,也 可以是其他序列型的Python數(shù)據(jù)結(jié)構(gòu)。Ind

26、ex 會(huì)被完全使用,就像沒(méi)有任何復(fù)制一樣。method 插值(填充)方式。fill_value 在重新索引的過(guò)程中,需要引入缺失值時(shí)使用 的替代值 . limit 前向或后向填充時(shí)的最大填充量.level 在Multiindex的指定級(jí)別上匹配簡(jiǎn)單索引,否 則選取其子集copy 默認(rèn)為True,無(wú)論如何都復(fù)制;如果為False, 則新舊相等就不復(fù)制第38頁(yè),共115頁(yè)?;竟δ軄G棄指定軸上的項(xiàng) 丟棄某條軸上的一個(gè)或多個(gè)項(xiàng)很簡(jiǎn)單,只要有一個(gè)索引數(shù)組或列表即可。由于需要執(zhí)行一些數(shù)據(jù)整理和集合邏輯,所以drop方法返回的是一個(gè)在指定軸上刪除了指定值的新對(duì)象:39obj = Series(np.ara

27、nge(5,), index=a, b, c, d, e) new_obj = obj.drop(c)new_obja 0b 1d 3e 4obj.drop(d,c)第39頁(yè),共115頁(yè)?;竟δ?對(duì)于DataFrame,可以刪除任意軸上的索引值:40 data = DataFrame(np.arange(16).reshape(4, 4), index=Ohio, Colorado, Utah, New York, columns=one, two, three, four)data.drop(Colorado, Ohio) data.drop(two, axis=1) data.drop(

28、two, four, axis=1)第40頁(yè),共115頁(yè)?;竟δ?1索引、選取和過(guò)濾 Series索引(obj.)的工作方式類似于NumPy數(shù)組的索引,只不過(guò)Series的索引值不只是整數(shù)。 obj = Series(np.arange(4,), index=a, b, c, d)objb1obj11obj2:4c 2d 3dtype: int32第41頁(yè),共115頁(yè)?;竟δ?42 objb, a, db 1a 0d 3dtype: int32obj1, 3b 1d 3dtype: int32objobj objb: cb 1c 2dtype: int32 objb :c = 5obja

29、0b 5c 5d 3第43頁(yè),共115頁(yè)?;竟δ?對(duì)DataFrame進(jìn)行索引其實(shí)就是獲取一個(gè)或多個(gè)列: 這種索引方式有幾個(gè)特殊的情況。首先通過(guò)切片或布爾型數(shù)組選取行:44 datatwoOhio 1Colorado 5Utah 9New York 13datathree, one data:2datadatathree 5第44頁(yè),共115頁(yè)?;竟δ?5 另一種用法是通過(guò)布爾型DataFrame (比如下面這個(gè)由標(biāo)量比較運(yùn)算得出的)進(jìn)行索引: 這段代碼的目的是使DataFrame在語(yǔ)法上更像ndarray。 data datadata data第45頁(yè),共115頁(yè)。基本功能 為了在Dat

30、aFrame的行上進(jìn)行標(biāo)簽索引,引入了專門的索引字段ix。它可以通過(guò) NumPy式的標(biāo)記法以及軸標(biāo)簽從DataFrame中選取行和列的子集。這也是一種重新索引的簡(jiǎn)單手段:46data.ixColorado, two, threetwo 5three 6Name: Colorado, dtype: int32data.ixColorado, Utah,3, 0, 1第46頁(yè),共115頁(yè)?;竟δ?47data.ix2one 8two 9three 10four 11Name: Utah, dtype: int32 data.ix:Utah, twoOhio 0Colorado 5Utah 9Na

31、me: two, dtype: int32 data.ixdata.three 5, :3 data.ixColorado, two, threetwo 5three 6Name: Colorado, dtype: int32 第47頁(yè),共115頁(yè)?;竟δ?8 DataFrame的索引選項(xiàng):類型 說(shuō)明objval 選取DataFrame的單個(gè)列或一組列。在一些特殊 情況下會(huì)比較便利:布爾型數(shù)組(過(guò)濾行)、切 片(行切片)、布爾型DataFrame (根據(jù)條件 設(shè)置值)。obj.ixval 選取DataFrame的單個(gè)行或一組行。obj.ix:, val 選取單個(gè)列或列子集。obj.ixval

32、1, val2 同時(shí)選取行和列。reindex 方法 將一個(gè)或多個(gè)軸匹配到新索引。xs方法 根據(jù)標(biāo)簽選取單行或單列,并返回一個(gè)Series。icol、irow方法 根據(jù)整數(shù)位置選取單列或單行,并返回一個(gè) Series。get.value, set_value方法 根據(jù)行標(biāo)簽和列標(biāo)簽選取單個(gè)值。第48頁(yè),共115頁(yè)?;竟δ?9算術(shù)運(yùn)算和數(shù)據(jù)對(duì)齊 pandas最重要的一個(gè)功能是,它可以對(duì)不同索引的對(duì)象進(jìn)行算術(shù)運(yùn)算。在將對(duì)象相加時(shí), 如果存在不同的索引對(duì),則結(jié)果的索引就是該索引對(duì)的并集。s1 = Series(7.3, -2.5, 3.4, 1.5,index=a, c, d, e)s2 = Se

33、ries(-2.1, 3.6, -1.5, 4, 3.1, index=a, c, e, f, g)s1 s2第49頁(yè),共115頁(yè)?;竟δ?將它們相加就會(huì)產(chǎn)生: 自動(dòng)的數(shù)據(jù)對(duì)齊操作在不重疊的索引處引入NA值。缺失值會(huì)在算術(shù)運(yùn)算過(guò)程中傳播。50s1+s2Out201: a 5.2c 1.1d NaNe 0.0f NaNg NaNdtype: float64第50頁(yè),共115頁(yè)?;竟δ?對(duì)于DataFrame,對(duì)齊操作會(huì)同時(shí)發(fā)生在行和列上: 51df1 = DataFrame(np.arange(9,).reshape(3, 3), columns=list(bcd), index=Ohio,

34、 Texas, Colorado)df2 = DataFrame(np.arange(12,).reshape(4, 3), columns=list(bde), index=Utah, Ohio, Texas, Oregon)df1df2 df1+ df2#把它們相加后將會(huì)返回一個(gè)新的DataFrame,其索引和列為原來(lái)那兩個(gè)DataFrame的并集.第51頁(yè),共115頁(yè)。基本功能52在算術(shù)方法中填充值 在對(duì)不同索引的對(duì)象進(jìn)行算術(shù)運(yùn)算時(shí),可能希望當(dāng)一個(gè)對(duì)象中某個(gè)軸標(biāo)簽在另一個(gè)對(duì)象中找不到時(shí)填充一個(gè)特殊值(比如0):df1 = DataFrame(np.arange(12).reshape(3

35、, 4), columns=list(abcd)df2 = DataFrame(np.arange(20.).reshape(4, 5), columns=list(abcde)df1df2 df1 + df2# 將它們相加時(shí),沒(méi)有重疊的位置就會(huì)產(chǎn)生NA值.第52頁(yè),共115頁(yè)?;竟δ?使用df1的add方法,傳入df2以及一個(gè)fill_value參數(shù): 與此類似,在對(duì)Series或DataFrame重新索引時(shí),也可以指定一個(gè)填充值:53df1.add(df2, fill_value=0) df1.reindex(columns=df2.columns, fill_value=0)靈活的算術(shù)

36、方法add 用于加法(+ )的方法 sub 用于減法(-)的方法 div 用于除法(/)的方法 mul 用于乘法(*)的方法第53頁(yè),共115頁(yè)。基本功能DataFrame和Series之間的運(yùn)算 跟NumPy數(shù)組一樣,DataFrame和Series之間算術(shù)運(yùn)算也是有明確規(guī)定的。先來(lái)看一個(gè)具有啟發(fā)性的例子,計(jì)算一個(gè)二維數(shù)組與其某行之間的差:54 arr = np.arange(12.).reshape(3, 4)arrarray( 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.)arr0array( 0., 1., 2., 3.)arr -

37、arr0array( 0., 0., 0., 0., 4., 4., 4., 4., 8., 8., 8., 8.)第54頁(yè),共115頁(yè)。基本功能 這就叫做廣播(broadcasting)。DataFrame和Series之間的運(yùn)算差不多也是如此: 默認(rèn)情況下,DataFrame和Series之間的算術(shù)運(yùn)算會(huì)將Series的索引匹配到DataFrame的列,然后沿著行一直向下廣播.55 frame = DataFrame(np.arange(12.).reshape(4, 3), columns=list(bde), index=Utah, Ohio, Texas, Oregon) serie

38、s = frame.ix0 frame seriesframe - series第55頁(yè),共115頁(yè)?;竟δ?如果某個(gè)索引值在DataFrame的列或Series的索引中找不到,則參與運(yùn)算的兩個(gè)對(duì)象就會(huì)被重新索引以形成并集: 如果希望匹配行且在列上廣播,則必須使用算術(shù)運(yùn)算方法。例如: 傳入的軸號(hào)就是希望匹配的軸。在本例中目的是匹配DauFrame的行索引并進(jìn)行廣播。 56 series2 = Series(range(3), index=b, e, f)frame + series2 series3 = framed series3 frame.sub(series3, axis=0)第56

39、頁(yè),共115頁(yè)?;竟δ?7函數(shù)應(yīng)用和映射 NumPy的ufuncs (元素級(jí)數(shù)組方法)也可用于操作pandas對(duì)象: frame = DataFrame(np.random.randn(4, 3), columns=list(bde), index=Utah, Ohio, Texas, Oregon)framenp.abs(frame)第57頁(yè),共115頁(yè)?;竟δ?另一個(gè)常見(jiàn)的操作是,將函數(shù)應(yīng)用到由各列或行所形成的一維數(shù)組上。DataFrame的 apply方法即可實(shí)現(xiàn)此功能: 許多最為常見(jiàn)的數(shù)組統(tǒng)計(jì)功能都被實(shí)現(xiàn)成DataFrame的方法(如sum和mean),因此無(wú)需使用apply方法。

40、58f = lambda x: x.max() - x.min()frame.apply(f)frame.apply(f, axis=1)第58頁(yè),共115頁(yè)?;竟δ?9 除標(biāo)量值外,傳遞給apply的函數(shù)還可以返回由多個(gè)值組成的Series: def f(x): return Series(x.min(), x.max(), index=min, max)frameframe.apply(f)第59頁(yè),共115頁(yè)。基本功能60 此外,元素級(jí)的Python函數(shù)也是可以用的。假如想得到frame中各個(gè)浮點(diǎn)值的格式化字符串,使用applymap即可: 之所以叫做applymap,是因?yàn)镾erie

41、s有一個(gè)用于應(yīng)用元素級(jí)函數(shù)的map方法:format = lambda x: %.2f % xframe.applymap(format)framee.map(format)第60頁(yè),共115頁(yè)?;竟δ芘判蚝团琶?根據(jù)條件對(duì)數(shù)據(jù)集排序(sorting)也是一種重要的內(nèi)置運(yùn)算。要對(duì)行或列索引進(jìn)行排序 (按字典順序),可使用sort_index方法,它將返回一個(gè)已排序的新對(duì)象: 61obj = Series(range(4), index=d, a, b, c)obj.sort_index()a 1b 2c 3d 0dtype: int64第61頁(yè),共115頁(yè)?;竟δ?2 而對(duì)于DataFra

42、me,則可以根據(jù)任意一個(gè)軸上的索引進(jìn)行排序: 數(shù)據(jù)默認(rèn)是按升序排序的,但也可以降序排序:frame = DataFrame(np.arange(8).reshape(2, 4), index=three, one, columns=d,a,b,c)frame.sort_index()frame.sort_index(axis=1)frame.sort_index(axis=1, ascending=False)第62頁(yè),共115頁(yè)?;竟δ?若要按值對(duì)Series進(jìn)行徘序,可使用其order方法:63obj = Series(4, 7, -3, 2)obj.order()2 -33 20 41

43、 7obj = Series(4, np.nan, 1, np.nan, -3, 2)obj.order() #在排序時(shí),缺失值默認(rèn)都會(huì)被放到Series的末尾.4 -32 15 20 41 NaNNaN第63頁(yè),共115頁(yè)?;竟δ?在DataFrame上,可能希望根據(jù)一個(gè)或多個(gè)列中的值進(jìn)行排序。將一個(gè)或多個(gè)列的名字傳遞給by選項(xiàng)即可達(dá)到該目的: 要根據(jù)多個(gè)列進(jìn)行排序,傳入名稱的列表即可:64frame = DataFrame(b: 4,7,-3,2, a:0, 1, 0, 1)frame frame.sort_index(by=b)frame.sort_index(by=a, b)第64頁(yè)

44、,共115頁(yè)?;竟δ?5 排名(ranking)跟排序關(guān)系密切,且它會(huì)增設(shè)一個(gè)排名值(從1開(kāi)始,一直到數(shù)組中有 效數(shù)據(jù)的數(shù)量)。它跟numpy.argsort產(chǎn)生的間接排序索引差不多,只不過(guò)它可以根據(jù)某種規(guī)則破壞平級(jí)關(guān)系。Series和DataFrame的rank方法:默認(rèn)情況下,rank是通過(guò)“為各組分配一個(gè)平均排名”的方式破壞平級(jí)關(guān)系的: obj = Series(7,-5,7,4,2,0,4)obj0 71 -52 73 44 25 06 4 print obj.rank()0 6.51 1.02 6.53 4.54 3.05 2.06 4.5第65頁(yè),共115頁(yè)?;竟δ?66 ob

45、j.rank(method=first) #根據(jù)值在原數(shù)據(jù)中出現(xiàn)的順序給出排名:0 61 12 73 44 35 25 obj.rank(ascending=False, method=max) # 按降序進(jìn)行排名:0 21 72 23 44 55 66 4第66頁(yè),共115頁(yè)?;竟δ?DataFrame可以在行或列上計(jì)算 排名: 67排名時(shí)用于破壞平級(jí)關(guān)系的method選項(xiàng)Method 說(shuō)明average 默認(rèn):在相等分組中,為各個(gè)值分配平均排名min 使用整個(gè)分組的最小排名max 使用整個(gè)分組的最大排名first 按值在原始數(shù)據(jù)中的出現(xiàn)順序分配排名 frame=DataFrame(b:

46、4.3, 7, -3, 2, a: 0, 1, 0, 1, c:-2, 5, 8, -2.5)frame frame.rank(axis=1)第67頁(yè),共115頁(yè)?;竟δ軒в兄貜?fù)值的軸索引 帶有重復(fù)索引值的Series: 索引的is_unique屬性驗(yàn)證是否是唯一的: 68obj = Series(range(5), index=a,a,b,b,c)obja 0a 1b 2b 3c 4obj.index.is_uniqueFalse第68頁(yè),共115頁(yè)。基本功能 對(duì)于帶有重復(fù)值的索引,數(shù)據(jù)選取的行為將會(huì)有些不同。如果某個(gè)索引對(duì)應(yīng)多個(gè)值,則 返回一個(gè)Series;而對(duì)應(yīng)單個(gè)值的,則返回一個(gè)標(biāo)量

47、值。 對(duì)DataFrame的行進(jìn)行索引時(shí)也是如此:69objaa 0a 1objc 4 df = DataFrame(np.random.randn(4, 3), index=a,a,b,b)df df.ixb第69頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) pandas對(duì)象擁有一組常用的數(shù)學(xué)和統(tǒng)計(jì)方法。它們大部分都屬于約簡(jiǎn)和匯總統(tǒng)計(jì),用于從Series中提取的個(gè)值(如sum或mean)或從DataFrame的行或列中提取一個(gè)Series。跟 對(duì)應(yīng)的NumPy數(shù)組方法相比,它們都是基于沒(méi)有缺失數(shù)據(jù)的假設(shè)而構(gòu)建的。接下來(lái)看一 個(gè)簡(jiǎn)單的DataFrame:70df = DataFrame(1.4, np.

48、nan, 7.1, -4.5, np.nan, np.nan, 0.75,-1.3, index=a,b,c,d, columns= one, two)df第70頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) 調(diào)用DataFrame的sum方法將會(huì)返回一個(gè)含有列小計(jì)的Series:71 df.sum()one 9.25two -5.80dtype: float64#傳入axis=1將會(huì)按行進(jìn)行求和運(yùn)算: df.sum(axis=1)a 1.40b 2.60c NaNd -0.55dtype: float64第71頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) NA值會(huì)自動(dòng)被排除,除非整個(gè)切片(這里指的是行或列)都是N

49、A。通過(guò)skipna選項(xiàng)可 以禁用該功能:72 df.mean(axis=1, skipna=False)a NaNb 1.300c NaNd -0.275dtype: float64約簡(jiǎn)方法的選項(xiàng) 選項(xiàng) 說(shuō)明axis 約簡(jiǎn)的軸。DataFrame的行用0,列用1skipna 排除缺失值,默認(rèn)值為Truelevel 如果軸是層次化索引的(即Multiindex),則根據(jù)level分 組約簡(jiǎn)第72頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) 有些方法(如idxmin和idxmax)返回的是間接統(tǒng)計(jì)(比如達(dá)到最小值或最大值的索引): 還有一種方法,它既不是約簡(jiǎn)型也不是累計(jì)型。describe就是一個(gè)例子,它

50、用于一次性 產(chǎn)生多個(gè)匯總統(tǒng)計(jì): 73 df.idxmax()one btwo d df.cumsum() # 累計(jì)型的計(jì)算 df.describe()第73頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) 對(duì)于非數(shù)值型數(shù)據(jù),describe會(huì)產(chǎn)生另外一種匯總統(tǒng)計(jì):74obj = Series(a,a,b,c * 4)objobj.describe()count 16unique 3top afreq 8dtype: object第74頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) 描述和匯總統(tǒng)計(jì):75方法 說(shuō)明count 非NA值的數(shù)量describe 針對(duì)Series或各DataFrame列計(jì)算匯總 統(tǒng)計(jì)min,ma

51、x 計(jì)算最小值和最大值argmin,argmax 計(jì)算能夠獲取到最小值和最大值的索引位 置(整數(shù))idxmin,idxmax 計(jì)算能夠獲取到最小值和最大值的索引值quantile 計(jì)算樣本的分位數(shù)(0到 1) sum 值的總和mean 值的平均數(shù)media 值的算術(shù)中位數(shù)(50%分位數(shù))mad 根據(jù)平均值計(jì)算平均絕對(duì)離差var 樣本值的方差 第75頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) 描述和匯總統(tǒng)計(jì)(續(xù))76方法 說(shuō)明std 樣本值的標(biāo)準(zhǔn)差skew 樣本值的偏度(三階矩)kurt 樣本值的峰度(四階矩)cumsum 樣本值的累計(jì)和cummin,cummax 樣本值的累計(jì)最大值和累計(jì)最小cumpr

52、od 樣本值的累計(jì)積diff 計(jì)算一階差分(對(duì)時(shí)間序列很有用) pct_change 計(jì)算百分?jǐn)?shù)變化第76頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì)相關(guān)系數(shù)與協(xié)方差 有些匯總統(tǒng)計(jì)(如相關(guān)系數(shù)和協(xié)方差)是通過(guò)參數(shù)對(duì)計(jì)算出來(lái)的。下面幾個(gè) DataFrame數(shù)據(jù)來(lái)自Yahoo! Finance的股票價(jià)格和成交量:77import pandas.io.data as web all_data = for ticker in AAPL,IBM,MSFT,GOOG: all_dataticker = web.get_data_yahoo(ticker,1/1/2000,1/1/2010)price = DataF

53、rame(tic: dataAdj Close for tic, data in all_data.iteritems() volume = DataFrame(tic: dataVolume for tic, data in all_data.iteritems()第77頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) 接下來(lái)計(jì)算價(jià)格的百分?jǐn)?shù)變化: Series的corr方法用于計(jì)算兩個(gè)Series中重疊的、非NA的、按索引對(duì)齊的值的相關(guān)系 數(shù)。與此類似,cov用干計(jì)算協(xié)方差: 78returns = price.pct_change()returns.tail()returns.MSFT.corr(re

54、turns.IBM)0.49597970053200319returns.MSFT.cov(returns.IBM)0.00021595764765417841第78頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) DataFrame的corr和cov方法將以DataFrame的形式返回完整的相關(guān)系數(shù)或協(xié)方差矩陣: 利用DataFrame的corrwith方法,可以計(jì)算其列或行跟另一個(gè)Series或DataFrame之間的相關(guān)系數(shù)。傳入一個(gè)Series將會(huì)返回一個(gè)相關(guān)系數(shù)值Series (針對(duì)各列進(jìn)行計(jì)算):79returns.corr()returns.cov() returns.corrwith(ret

55、urns.IBM)AAPL 0.410011GOOG 0.390689IBM 1.000000MSFT 0.495980第79頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) 傳入一個(gè)DataFrame則會(huì)計(jì)算按列名配對(duì)的相關(guān)系數(shù)。下面計(jì)算了百分比變化與成交量的相關(guān)系數(shù): 傳入axis=1即可按行進(jìn)行計(jì)算。無(wú)論如何,在計(jì)算相關(guān)系數(shù)之前,所有的數(shù)據(jù)項(xiàng)都會(huì)按標(biāo)簽對(duì)齊。80 returns.corrwith(volume)AAPL -0.057549GOOG 0.062647IBM -0.007892MSFT -0.014245dtype: float64第80頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì)唯一值、值計(jì)數(shù)以及

56、成員資格 還有一類方法可以從一維Series的值中抽取信息。以下面這個(gè)Series為例: 返回的唯一值是未排序的,如果需要的話,可以對(duì)結(jié)果再次進(jìn)行排序(uniques. sort()。value_counts用于計(jì)算一個(gè)Series中各值出現(xiàn)的頻率: 81 obj=Series(c,a,d,a,a,b,b,c,c)# 函數(shù)是unique,它可以得到Series中的唯一值數(shù)組:uniques = obj.unique()uniquesarray(c, a, d, b, dtype=object)第81頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) 為了便于査看,結(jié)果Series是按值頻率降序排列的。valu

57、e_counts還是一個(gè)頂級(jí)pandas方法,可用于任何數(shù)組或序列: 82 obj.value_counts()c 3a 3b 2d 1dtype: int64 pd.value_counts(obj.values, sort=False)a 3c 3b 2d 1dtype: int64第82頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) 最后是isin,它用于判斷矢量化集合的成員資格,可用于選取Series中或DataFrame列中 數(shù)據(jù)的子集:83mask=obj.isin(b,c) mask0 True1 False2 False3 False4 False5 True6 True7 True8 T

58、ruedtype: bool obj0 c1 a2 d3 a4 a5 b6 b7 c8 cdtype: object objmask0 c5 b6 b7 c8 c第83頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì) 唯一值、值計(jì)數(shù)、成員資格方法84方法 說(shuō)明isin 計(jì)算一個(gè)表示“Series各值是否包含于 傳入的值序列中”的布爾型數(shù)組 unique 計(jì)算Series中的唯一值數(shù)組,按發(fā)現(xiàn) 的順序返回 value_counts 返回一個(gè)Series,其索引為唯一值,其 值為頻率,按計(jì)數(shù)值降序排列第84頁(yè),共115頁(yè)。匯總和計(jì)算描述統(tǒng)計(jì)85 有時(shí),可能希望得到DataFrame中多個(gè)相關(guān)列的一張柱狀圖。例如

59、: 將 pandas.value_counts 傳給該 DataFrame 的 apply 函數(shù),就會(huì)出現(xiàn): data = DataFrame(Qu1: 1, 3, 4, 3, 4, Qu2: 2, 3, 1, 2, 3, Qu3: 1, 5, 2, 4, 4)dataresult = data.apply(pd.value_counts).fillna(0)result第85頁(yè),共115頁(yè)。處理缺失數(shù)據(jù) 缺失數(shù)據(jù)(missing data)在大部分?jǐn)?shù)據(jù)分析應(yīng)用中都很常見(jiàn)。pandas的設(shè)計(jì)目標(biāo)之一就是讓缺失數(shù)據(jù)的處理任務(wù)盡量輕松。例如,pandas對(duì)象上的所有描述統(tǒng)計(jì)都排除了缺失數(shù)據(jù)。 pa

60、ndas使用浮點(diǎn)值NaN (Not a Number)表示浮點(diǎn)和非浮點(diǎn)數(shù)組中的缺失數(shù)據(jù)。它只是一 個(gè)便于被檢測(cè)出來(lái)的標(biāo)記而已: 86string_data=Series(aardvark,artichoke,np.nan,avocado)第86頁(yè),共115頁(yè)。處理缺失數(shù)據(jù) Python內(nèi)置的None值也會(huì)被當(dāng)做NA處理 87 string_data0 = Nonestring_data.isnull() 0 True1 False2 True3 Falsedtype: bool string_data0 aardvark1 artichoke2 NaN3 avocadodtype: objec

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論