




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1pandas入門第1頁,共115頁。目錄pandas的數(shù)據(jù)結(jié)構(gòu)介紹SeriesDataFrame索引對象基本功能重新索引丟棄指定軸上的項索引、選取和過濾 算術(shù)運算和數(shù)據(jù)對齊函數(shù)應(yīng)用和映射排序和排名帶有重復(fù)值的軸索引2第2頁,共115頁。目錄匯總和計算描述統(tǒng)計相關(guān)系數(shù)與協(xié)方差唯一值、值計數(shù)以及成員資格處理缺失數(shù)據(jù)濾除缺失數(shù)據(jù)填充缺失數(shù)據(jù)層次化索引重排分級順序根據(jù)級別匯總統(tǒng)計使用DataFrame的列其他有關(guān)pandas的話題3第3頁,共115頁。4 pandas含有使數(shù)據(jù)分析工作變得更快更簡單的高級數(shù)據(jù)結(jié)構(gòu)和操作工具。它是基于NumPy構(gòu)建的,讓以NumPy為中心的應(yīng)用變得更加簡單。 因為Se
2、ries和DataFrame用的次數(shù)非常多,所以將其引入本地命名空間中會更方便。from pandas import Series, DataFrame import pandas as pd第4頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹Series Series是一種類似于一維數(shù)組的對象,它由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)以及一組 與之相關(guān)的數(shù)據(jù)標簽(即索引)組成。僅由一組數(shù)據(jù)即可產(chǎn)生最簡單的Series: 5obj = Series(4, 7, -5, 3)obj0 41 72 -53 3dtype: int64第5頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 Series的字符串表現(xiàn)形
3、式為:索引在左邊,值在右邊。由于沒有為數(shù)據(jù)指定索引, 于是會自動創(chuàng)建一個0到N-1 (N為數(shù)據(jù)的長度)的整數(shù)型索引??梢酝ㄟ^Series的 values和index屬性獲取其數(shù)組表示形式和索引對象: 6obj.valuesarray( 4, 7, -5, 3, dtype=int64)obj.indexInt64Index(0, 1, 2, 3, dtype=int64)第6頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 通常希望所創(chuàng)建的Series帶有一個可以對各個數(shù)據(jù)點進行標記的索引: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頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 與普通NumPy數(shù)組相比,可以通過索引的方式選取Series中的單個或一組值:8obj2a-5obj2d= 6obj2c,a,dc 3a -5d 6dtype: int64第8頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 NumPy數(shù)組運算(如根據(jù)布爾型數(shù)組進行過濾、標量乘法、應(yīng)用數(shù)學(xué)函數(shù)等)都會保留索引和值之間的鏈接:9obj2obj2obj2 0obj2*2np.exp(obj2)d 403.428793b 1096.6331
5、58a 0.006738c 20.085537dtype: float64第9頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 還可以將Series看成是一個定長的有序字典,因為它是索引值到數(shù)據(jù)值的一個映射。它 可以用在許多原本需要字典參數(shù)的函數(shù)中:10b in obj2Truee in obj2False第10頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹11 如果數(shù)據(jù)被存放在一個Python字典中,也可以直接通過這個字典來創(chuàng)建Series:sdata = Ohio: 35000, Texas: 71000, Oregon: 16000, Utah: 5000obj3 = Series(sdata)o
6、bj3Ohio 35000Oregon 16000Texas 71000Utah 5000dtype: int64第11頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 如果只傳入一個字典,則結(jié)果Series中的索引就是原字典的鍵(有序排列)。 在例子中,sdata跟states索引相匹配的那3個值會被找出來并放到相應(yīng)的位置上, 但由于“California”所對應(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頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 在pandas中使用 NaN表示缺失(missing) 或NA值。 pandas的isnull和notnull函數(shù)可用于檢測缺失數(shù)據(jù): 13pd.isnull(obj4) # Series也有類似的實例方法:California True #obj4.isnull()Ohio FalseOregon FalseTexas Falsedtype: bool pd.notnull(obj4)California
8、FalseOhio TrueOregon TrueTexas Truedtype: bool第13頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 對于許多應(yīng)用而言,Series域重要的一個功能是:它在算術(shù)運算中會自動對齊不同索引 的數(shù)據(jù)。 14 obj3 obj4obj3 + obj4California NaNOhio 70000Oregon 32000Texas 142000Utah NaNdtype: float64第14頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 Series對象本身及其索引都有一個name屬性,該屬性跟pandas其他的關(guān)鍵功能關(guān)系非常密切: 15 =
9、 = stateobj4stateCalifornia NaNOhio 35000Oregon 16000Texas 71000Name: population, dtype: float64第15頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹16 Series的索引可以通過賦值的方式就地修改:obj0 41 72 -53 3obj.index = Bob, Steve, Jeff, RyanobjBob 4Steve 7Jeff -5Ryan 3dtype: int64第16頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹17DataFrame Da
10、taFrame是一個表格型的數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值類 型(數(shù)值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。跟其他類似的數(shù)據(jù)結(jié)構(gòu)相比(如R的data. frame),DataFrame中面向行和面向列的操作基本上是平衡的。其實,DataFrame中的 數(shù)據(jù)是以一個或多個二維塊存放的(而不是列表、字典或別的一維數(shù)據(jù)結(jié)構(gòu))。第17頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 構(gòu)建DataFrame的辦法有很多,最常用的一種是直接傳入一個由等長列表或NumPy數(shù)組 組成的字典: 結(jié)果DataFrame會自
11、動加上索引(跟Series一樣),且全部列會被有序悱列.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頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 如果指定了列序列,則DataFrame的列就會按照指定順序迸行排列: 跟Series一樣,如果傳入的列在數(shù)據(jù)中找不到,就會產(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頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 通過類似字典標記的方式或?qū)傩缘姆绞?,可以將DataFrame的列獲取為一個Series:20frame2stateone Ohiotwo Ohiothree Ohiofour Nevadafive NevadaName: state, d
13、type: objectframe2.yearone 2000two 2001three 2002four 2001five 2002Name: year, dtype: int64第20頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 注意,返冋的Series擁有原DataFrame相同的索引,且其name屬性也已經(jīng)被相應(yīng)地設(shè)置 好了。行也可以通過位置或名稱的方式進行獲取,比如用索引字段ix :21 frame2.ixthreeyear 2002state Ohiopop 3.6debt NaNName: three, dtype: object第21頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 列
14、可以通過賦值的方式進行修改。例如,可以給那個空的“debt”列賦上一個標量值或一組值:22frame2debt = 16.5frame2frame2debt = np.arange(5)frame2第22頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹23 將列表或數(shù)組賦值給某個列時,其長度必須跟DataFrame的長度相匹配。如果賦值的是一個Series,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值: val = Series(-1.2, -1.5, -1.7, index= two, four, five)frame2debt = valframe2第23頁,共115頁。pa
15、ndas的數(shù)據(jù)結(jié)構(gòu)介紹 為不存在的列賦值會創(chuàng)建出一個新列。關(guān)鍵字del用于刪除列:24 frame2eastern = frame2.state = Ohioframe2 del frame2easternframe2.columnsIndex(uyear, ustate, upop, udebt, dtype=object)第24頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 另一種常見的數(shù)據(jù)形式是嵌套字典(也就是字典的字典): 如果將它傳給DataFrame,它就會被解釋為:外層字典的鍵作為列,內(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 #也可以對該結(jié)果進行轉(zhuǎn)置第25頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 內(nèi)層字典的鍵會被合并、排序以形成最終的索引。如果顯式指定了索引,則不會這樣: 由Series組成的字典差不多也是一樣的用法: 26 DataFrame(pop, index=2001, 2002, 2003) frame3 pdata = Ohio: frame3Ohio:-1, Nevada: frame3Nevada:2DataFrame(pdata)第26頁,共115
17、頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹27 如果設(shè)置了DataFrame的index和columns的name屬性,則這些信息也會被顯示出來: 跟Series一樣,values屬性也會以二維ndarray的形式返回DataFrame中的數(shù)據(jù): = year; = stateframe3 = year; = stateframe3.valuesarray( nan, 1.5, 2.4, 1.7, 2.9, 3.6)第27頁,共115頁。pandas的數(shù)據(jù)
18、結(jié)構(gòu)介紹28 如果DataFrame各列的數(shù)據(jù)類型不同,則值數(shù)組的數(shù)據(jù)類型就會選用能兼容所有列的數(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頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹索引對象 pandas的索引對象負責管理軸標簽和其他元數(shù)據(jù)(比如軸名稱等)。構(gòu)建Series或 DataFrame時,所
19、用到的任何數(shù)組或其他序列的標簽都會被轉(zhuǎn)換成一個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頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 Index對象是不可修改的(immutable),因此用戶不能對其進行修改: 不可修改性非常重要,因為這樣才能使Index對象在多個數(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頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)介紹 除了長得像數(shù)組,Index的功能也類似一個固定大小的集合: 每個索引都有一些方法和屬性,它們可用于設(shè)置邏輯并回答有關(guān)該索引所包含的數(shù)據(jù)的 常見問題。 31 frame3Ohio in frame3.columnsTrue2003 in frame3.indexFalse第31頁,共115頁。pandas的數(shù)據(jù)結(jié)構(gòu)
21、介紹 32方法說明append連接另一個Index對象,產(chǎn)生一個新的Indexdiff計算差集,并得到一個Indexintersection計算交集union計算并集isin計算一個指示各值是否都包含在參數(shù)集合中的布爾型數(shù)組delete刪除索引i處的元素,并得到新的Indexdrop刪除傳入的值,并得到新的Indexinsert將元素插入到索引i處,并得到新的Indexis_monotonic當各元素均大于等于前一個元素時,返回Trueis.unique當Index沒有重復(fù)值時,返回Trueunique計算Index中唯一值的數(shù)組Index的方法和屬性第32頁,共115頁?;竟δ苤匦滤饕?p
22、andas對象的一個重要方法是reindex,其作用是創(chuàng)建一個適應(yīng)新索引的新對象。以之前 的一個簡單示例來說: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頁,共115頁?;竟δ?4 調(diào)用該Series的reindex將會根據(jù)新索引進行重排。如果某個索引值當前不存在,就引入缺失值: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頁,共115頁。基本功能 對于時間序列這樣的有序數(shù)據(jù),重新索引時可能需要做一些插值處理。method選項即可 達到此目的,例如,使用ffill可以實現(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頁,共115頁。基本功能 rei
24、ndex的(插值)method選項 對于DataFrame,reindex可以修改(行)索引、列,或兩個都修改。如果僅傳入一個序列,則會重新索引行:36參數(shù) 說明ffill或pad 前向填充(或搬運)值bfill或backfill后向填充(或搬運)值 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頁,共115頁。基本功能37 使用columns關(guān)鍵字即可重新索
25、引列: 也可以同時對行和列進行重新索引,而插值則只能按行應(yīng)用(即軸0): 利用ix的標簽索引功能,重新索引任務(wù)可以變得更簡潔: 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頁,共115頁。基本功能 reindex函數(shù)的參數(shù) 38參數(shù) 說明index 用作索引的新序列。既可以是index實例,也 可以是其他序列型的Python數(shù)據(jù)結(jié)構(gòu)。Ind
26、ex 會被完全使用,就像沒有任何復(fù)制一樣。method 插值(填充)方式。fill_value 在重新索引的過程中,需要引入缺失值時使用 的替代值 . limit 前向或后向填充時的最大填充量.level 在Multiindex的指定級別上匹配簡單索引,否 則選取其子集copy 默認為True,無論如何都復(fù)制;如果為False, 則新舊相等就不復(fù)制第38頁,共115頁。基本功能丟棄指定軸上的項 丟棄某條軸上的一個或多個項很簡單,只要有一個索引數(shù)組或列表即可。由于需要執(zhí)行一些數(shù)據(jù)整理和集合邏輯,所以drop方法返回的是一個在指定軸上刪除了指定值的新對象: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頁,共115頁?;竟δ?對于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頁,共115頁。基本功能41索引、選取和過濾 Series索引(obj.)的工作方式類似于NumPy數(shù)組的索引,只不過Series的索引值不只是整數(shù)。 obj = Series(np.arange(4,), index=a, b, c, d)objb1obj11obj2:4c 2d 3dtype: int32第41頁,共115頁?;竟δ?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頁,共115頁?;竟δ?對DataFrame進行索引其實就是獲取一個或多個列: 這種索引方式有幾個特殊的情況。首先通過切片或布爾型數(shù)組選取行:44 datatwoOhio 1Colorado 5Utah 9New York 13datathree, one data:2datadatathree 5第44頁,共115頁?;竟δ?5 另一種用法是通過布爾型DataFrame (比如下面這個由標量比較運算得出的)進行索引: 這段代碼的目的是使DataFrame在語法上更像ndarray。 data datadata data第45頁,共115頁。基本功能 為了在Dat
30、aFrame的行上進行標簽索引,引入了專門的索引字段ix。它可以通過 NumPy式的標記法以及軸標簽從DataFrame中選取行和列的子集。這也是一種重新索引的簡單手段:46data.ixColorado, two, threetwo 5three 6Name: Colorado, dtype: int32data.ixColorado, Utah,3, 0, 1第46頁,共115頁?;竟δ?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頁,共115頁。基本功能48 DataFrame的索引選項:類型 說明objval 選取DataFrame的單個列或一組列。在一些特殊 情況下會比較便利:布爾型數(shù)組(過濾行)、切 片(行切片)、布爾型DataFrame (根據(jù)條件 設(shè)置值)。obj.ixval 選取DataFrame的單個行或一組行。obj.ix:, val 選取單個列或列子集。obj.ixval
32、1, val2 同時選取行和列。reindex 方法 將一個或多個軸匹配到新索引。xs方法 根據(jù)標簽選取單行或單列,并返回一個Series。icol、irow方法 根據(jù)整數(shù)位置選取單列或單行,并返回一個 Series。get.value, set_value方法 根據(jù)行標簽和列標簽選取單個值。第48頁,共115頁?;竟δ?9算術(shù)運算和數(shù)據(jù)對齊 pandas最重要的一個功能是,它可以對不同索引的對象進行算術(shù)運算。在將對象相加時, 如果存在不同的索引對,則結(jié)果的索引就是該索引對的并集。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頁,共115頁。基本功能 將它們相加就會產(chǎn)生: 自動的數(shù)據(jù)對齊操作在不重疊的索引處引入NA值。缺失值會在算術(shù)運算過程中傳播。50s1+s2Out201: a 5.2c 1.1d NaNe 0.0f NaNg NaNdtype: float64第50頁,共115頁?;竟δ?對于DataFrame,對齊操作會同時發(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#把它們相加后將會返回一個新的DataFrame,其索引和列為原來那兩個DataFrame的并集.第51頁,共115頁?;竟δ?2在算術(shù)方法中填充值 在對不同索引的對象進行算術(shù)運算時,可能希望當一個對象中某個軸標簽在另一個對象中找不到時填充一個特殊值(比如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# 將它們相加時,沒有重疊的位置就會產(chǎn)生NA值.第52頁,共115頁?;竟δ?使用df1的add方法,傳入df2以及一個fill_value參數(shù): 與此類似,在對Series或DataFrame重新索引時,也可以指定一個填充值:53df1.add(df2, fill_value=0) df1.reindex(columns=df2.columns, fill_value=0)靈活的算術(shù)
36、方法add 用于加法(+ )的方法 sub 用于減法(-)的方法 div 用于除法(/)的方法 mul 用于乘法(*)的方法第53頁,共115頁。基本功能DataFrame和Series之間的運算 跟NumPy數(shù)組一樣,DataFrame和Series之間算術(shù)運算也是有明確規(guī)定的。先來看一個具有啟發(fā)性的例子,計算一個二維數(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頁,共115頁?;竟δ?這就叫做廣播(broadcasting)。DataFrame和Series之間的運算差不多也是如此: 默認情況下,DataFrame和Series之間的算術(shù)運算會將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頁,共115頁。基本功能 如果某個索引值在DataFrame的列或Series的索引中找不到,則參與運算的兩個對象就會被重新索引以形成并集: 如果希望匹配行且在列上廣播,則必須使用算術(shù)運算方法。例如: 傳入的軸號就是希望匹配的軸。在本例中目的是匹配DauFrame的行索引并進行廣播。 56 series2 = Series(range(3), index=b, e, f)frame + series2 series3 = framed series3 frame.sub(series3, axis=0)第56
39、頁,共115頁?;竟δ?7函數(shù)應(yīng)用和映射 NumPy的ufuncs (元素級數(shù)組方法)也可用于操作pandas對象: frame = DataFrame(np.random.randn(4, 3), columns=list(bde), index=Utah, Ohio, Texas, Oregon)framenp.abs(frame)第57頁,共115頁?;竟δ?另一個常見的操作是,將函數(shù)應(yīng)用到由各列或行所形成的一維數(shù)組上。DataFrame的 apply方法即可實現(xiàn)此功能: 許多最為常見的數(shù)組統(tǒng)計功能都被實現(xiàn)成DataFrame的方法(如sum和mean),因此無需使用apply方法。
40、58f = lambda x: x.max() - x.min()frame.apply(f)frame.apply(f, axis=1)第58頁,共115頁?;竟δ?9 除標量值外,傳遞給apply的函數(shù)還可以返回由多個值組成的Series: def f(x): return Series(x.min(), x.max(), index=min, max)frameframe.apply(f)第59頁,共115頁?;竟δ?0 此外,元素級的Python函數(shù)也是可以用的。假如想得到frame中各個浮點值的格式化字符串,使用applymap即可: 之所以叫做applymap,是因為Serie
41、s有一個用于應(yīng)用元素級函數(shù)的map方法:format = lambda x: %.2f % xframe.applymap(format)framee.map(format)第60頁,共115頁?;竟δ芘判蚝团琶?根據(jù)條件對數(shù)據(jù)集排序(sorting)也是一種重要的內(nèi)置運算。要對行或列索引進行排序 (按字典順序),可使用sort_index方法,它將返回一個已排序的新對象: 61obj = Series(range(4), index=d, a, b, c)obj.sort_index()a 1b 2c 3d 0dtype: int64第61頁,共115頁?;竟δ?2 而對于DataFra
42、me,則可以根據(jù)任意一個軸上的索引進行排序: 數(shù)據(jù)默認是按升序排序的,但也可以降序排序: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頁,共115頁?;竟δ?若要按值對Series進行徘序,可使用其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() #在排序時,缺失值默認都會被放到Series的末尾.4 -32 15 20 41 NaNNaN第63頁,共115頁。基本功能 在DataFrame上,可能希望根據(jù)一個或多個列中的值進行排序。將一個或多個列的名字傳遞給by選項即可達到該目的: 要根據(jù)多個列進行排序,傳入名稱的列表即可: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頁
44、,共115頁。基本功能65 排名(ranking)跟排序關(guān)系密切,且它會增設(shè)一個排名值(從1開始,一直到數(shù)組中有 效數(shù)據(jù)的數(shù)量)。它跟numpy.argsort產(chǎn)生的間接排序索引差不多,只不過它可以根據(jù)某種規(guī)則破壞平級關(guān)系。Series和DataFrame的rank方法:默認情況下,rank是通過“為各組分配一個平均排名”的方式破壞平級關(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頁,共115頁?;竟δ?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) # 按降序進行排名:0 21 72 23 44 55 66 4第66頁,共115頁?;竟δ?DataFrame可以在行或列上計算 排名: 67排名時用于破壞平級關(guān)系的method選項Method 說明average 默認:在相等分組中,為各個值分配平均排名min 使用整個分組的最小排名max 使用整個分組的最大排名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頁,共115頁?;竟δ軒в兄貜?fù)值的軸索引 帶有重復(fù)索引值的Series: 索引的is_unique屬性驗證是否是唯一的: 68obj = Series(range(5), index=a,a,b,b,c)obja 0a 1b 2b 3c 4obj.index.is_uniqueFalse第68頁,共115頁。基本功能 對于帶有重復(fù)值的索引,數(shù)據(jù)選取的行為將會有些不同。如果某個索引對應(yīng)多個值,則 返回一個Series;而對應(yīng)單個值的,則返回一個標量
47、值。 對DataFrame的行進行索引時也是如此:69objaa 0a 1objc 4 df = DataFrame(np.random.randn(4, 3), index=a,a,b,b)df df.ixb第69頁,共115頁。匯總和計算描述統(tǒng)計 pandas對象擁有一組常用的數(shù)學(xué)和統(tǒng)計方法。它們大部分都屬于約簡和匯總統(tǒng)計,用于從Series中提取的個值(如sum或mean)或從DataFrame的行或列中提取一個Series。跟 對應(yīng)的NumPy數(shù)組方法相比,它們都是基于沒有缺失數(shù)據(jù)的假設(shè)而構(gòu)建的。接下來看一 個簡單的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頁,共115頁。匯總和計算描述統(tǒng)計 調(diào)用DataFrame的sum方法將會返回一個含有列小計的Series:71 df.sum()one 9.25two -5.80dtype: float64#傳入axis=1將會按行進行求和運算: df.sum(axis=1)a 1.40b 2.60c NaNd -0.55dtype: float64第71頁,共115頁。匯總和計算描述統(tǒng)計 NA值會自動被排除,除非整個切片(這里指的是行或列)都是N
49、A。通過skipna選項可 以禁用該功能:72 df.mean(axis=1, skipna=False)a NaNb 1.300c NaNd -0.275dtype: float64約簡方法的選項 選項 說明axis 約簡的軸。DataFrame的行用0,列用1skipna 排除缺失值,默認值為Truelevel 如果軸是層次化索引的(即Multiindex),則根據(jù)level分 組約簡第72頁,共115頁。匯總和計算描述統(tǒng)計 有些方法(如idxmin和idxmax)返回的是間接統(tǒng)計(比如達到最小值或最大值的索引): 還有一種方法,它既不是約簡型也不是累計型。describe就是一個例子,它
50、用于一次性 產(chǎn)生多個匯總統(tǒng)計: 73 df.idxmax()one btwo d df.cumsum() # 累計型的計算 df.describe()第73頁,共115頁。匯總和計算描述統(tǒng)計 對于非數(shù)值型數(shù)據(jù),describe會產(chǎn)生另外一種匯總統(tǒng)計:74obj = Series(a,a,b,c * 4)objobj.describe()count 16unique 3top afreq 8dtype: object第74頁,共115頁。匯總和計算描述統(tǒng)計 描述和匯總統(tǒng)計:75方法 說明count 非NA值的數(shù)量describe 針對Series或各DataFrame列計算匯總 統(tǒng)計min,ma
51、x 計算最小值和最大值argmin,argmax 計算能夠獲取到最小值和最大值的索引位 置(整數(shù))idxmin,idxmax 計算能夠獲取到最小值和最大值的索引值quantile 計算樣本的分位數(shù)(0到 1) sum 值的總和mean 值的平均數(shù)media 值的算術(shù)中位數(shù)(50%分位數(shù))mad 根據(jù)平均值計算平均絕對離差var 樣本值的方差 第75頁,共115頁。匯總和計算描述統(tǒng)計 描述和匯總統(tǒng)計(續(xù))76方法 說明std 樣本值的標準差skew 樣本值的偏度(三階矩)kurt 樣本值的峰度(四階矩)cumsum 樣本值的累計和cummin,cummax 樣本值的累計最大值和累計最小cumpr
52、od 樣本值的累計積diff 計算一階差分(對時間序列很有用) pct_change 計算百分數(shù)變化第76頁,共115頁。匯總和計算描述統(tǒng)計相關(guān)系數(shù)與協(xié)方差 有些匯總統(tǒng)計(如相關(guān)系數(shù)和協(xié)方差)是通過參數(shù)對計算出來的。下面幾個 DataFrame數(shù)據(jù)來自Yahoo! Finance的股票價格和成交量: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頁,共115頁。匯總和計算描述統(tǒng)計 接下來計算價格的百分數(shù)變化: Series的corr方法用于計算兩個Series中重疊的、非NA的、按索引對齊的值的相關(guān)系 數(shù)。與此類似,cov用干計算協(xié)方差: 78returns = price.pct_change()returns.tail()returns.MSFT.corr(re
54、turns.IBM)0.49597970053200319returns.MSFT.cov(returns.IBM)0.00021595764765417841第78頁,共115頁。匯總和計算描述統(tǒng)計 DataFrame的corr和cov方法將以DataFrame的形式返回完整的相關(guān)系數(shù)或協(xié)方差矩陣: 利用DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關(guān)系數(shù)。傳入一個Series將會返回一個相關(guān)系數(shù)值Series (針對各列進行計算):79returns.corr()returns.cov() returns.corrwith(ret
55、urns.IBM)AAPL 0.410011GOOG 0.390689IBM 1.000000MSFT 0.495980第79頁,共115頁。匯總和計算描述統(tǒng)計 傳入一個DataFrame則會計算按列名配對的相關(guān)系數(shù)。下面計算了百分比變化與成交量的相關(guān)系數(shù): 傳入axis=1即可按行進行計算。無論如何,在計算相關(guān)系數(shù)之前,所有的數(shù)據(jù)項都會按標簽對齊。80 returns.corrwith(volume)AAPL -0.057549GOOG 0.062647IBM -0.007892MSFT -0.014245dtype: float64第80頁,共115頁。匯總和計算描述統(tǒng)計唯一值、值計數(shù)以及
56、成員資格 還有一類方法可以從一維Series的值中抽取信息。以下面這個Series為例: 返回的唯一值是未排序的,如果需要的話,可以對結(jié)果再次進行排序(uniques. sort()。value_counts用于計算一個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頁,共115頁。匯總和計算描述統(tǒng)計 為了便于査看,結(jié)果Series是按值頻率降序排列的。valu
57、e_counts還是一個頂級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頁,共115頁。匯總和計算描述統(tǒng)計 最后是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頁,共115頁。匯總和計算描述統(tǒng)計 唯一值、值計數(shù)、成員資格方法84方法 說明isin 計算一個表示“Series各值是否包含于 傳入的值序列中”的布爾型數(shù)組 unique 計算Series中的唯一值數(shù)組,按發(fā)現(xiàn) 的順序返回 value_counts 返回一個Series,其索引為唯一值,其 值為頻率,按計數(shù)值降序排列第84頁,共115頁。匯總和計算描述統(tǒng)計85 有時,可能希望得到DataFrame中多個相關(guān)列的一張柱狀圖。例如
59、: 將 pandas.value_counts 傳給該 DataFrame 的 apply 函數(shù),就會出現(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頁,共115頁。處理缺失數(shù)據(jù) 缺失數(shù)據(jù)(missing data)在大部分數(shù)據(jù)分析應(yīng)用中都很常見。pandas的設(shè)計目標之一就是讓缺失數(shù)據(jù)的處理任務(wù)盡量輕松。例如,pandas對象上的所有描述統(tǒng)計都排除了缺失數(shù)據(jù)。 pa
60、ndas使用浮點值NaN (Not a Number)表示浮點和非浮點數(shù)組中的缺失數(shù)據(jù)。它只是一 個便于被檢測出來的標記而已: 86string_data=Series(aardvark,artichoke,np.nan,avocado)第86頁,共115頁。處理缺失數(shù)據(jù) Python內(nèi)置的None值也會被當做NA處理 87 string_data0 = Nonestring_data.isnull() 0 True1 False2 True3 Falsedtype: bool string_data0 aardvark1 artichoke2 NaN3 avocadodtype: objec
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川文化藝術(shù)學(xué)院《軌道交通自動化專題》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025屆湖南省高考歷史仿真模擬試卷02
- 2025年上海市安全員《C證》考試題庫
- 晉中學(xué)院《特種鑄造》2023-2024學(xué)年第二學(xué)期期末試卷
- 林州建筑職業(yè)技術(shù)學(xué)院《商業(yè)插圖》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江中醫(yī)藥大學(xué)《商務(wù)溝通與談判》2023-2024學(xué)年第二學(xué)期期末試卷
- 拉薩師范高等??茖W(xué)校《大數(shù)據(jù)安全技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 長沙學(xué)院《生物藥物檢測技術(shù)與設(shè)備》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東文藝職業(yè)學(xué)院《凈水處理工藝與工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 桂林醫(yī)學(xué)院《中國特色社會主義政治經(jīng)濟學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 醫(yī)院門診醫(yī)生績效考核標準及評分細則
- 遼寧省沈陽市名校2024年中考物理模擬試題含解析
- 歷史類常識考試100題及完整答案
- 醫(yī)院納入定點后使用醫(yī)療保障基金的預(yù)測性分析報告
- 媒介素養(yǎng)概論 課件 劉勇 第0-4章 緒論、媒介素養(yǎng)-新聞評論
- 智能割草機器人的概述外文翻譯
- 井下作業(yè)工:初級井下作業(yè)工考試答案二
- 民營企業(yè)職務(wù)犯罪預(yù)防
- 睿智醫(yī)藥科技股份有限公司財務(wù)分析研究
- 【品牌戰(zhàn)略】麥當勞公司成功管理秘訣苦心經(jīng)營
- 菜點與酒水知識課件
評論
0/150
提交評論