1、1pandas入门第1页目录opandas数据结构介绍nSeriesnDataFramen索引对象o基本功效n重新索引n丢弃指定轴上项n索引、选取和过滤n算术运算和数据对齐n函数应用和映射n排序和排名n带有重复值轴索引2第2页目录o汇总和计算描述统计n相关系数与协方差n唯一值、值计数以及组员资格o处理缺失数据n滤除缺失数据n填充缺失数据o层次化索引n重排分级次序n依据级别汇总统计n使用DataFrame列o其它相关pandas话题3第3页4pandas含有使数据分析工作变得更加快更简单高级数据结构和操作工具。它是基于NumPy构建,让以NumPy为中心应用变得愈加简单。因为Series和Dat
2、aFrame用次数非常多,所以将其引入当地命名空间中会更方便。frompandasimportSeries,DataFrameimportpandasaspd第4页pandas数据结构介绍oSeriesoSeries是一个类似于一维数组对象,它由一组数据(各种NumPy数据类型)以及一组与之相关数据标签(即索引)组成。仅由一组数据即可产生最简单Series:o5obj=Series(4,7,-5,3)obj04172-533dtype:int64第5页pandas数据结构介绍Series字符串表现形式为:索引在左边,值在右边。因为没有为数据指定索引,于是会自动创建一个0到N-1(N为数据长度)
3、整数型索引。能够经过Seriesvalues和index属性获取其数组表示形式和索引对象:6obj.valuesarray(4,7,-5,3,dtype=int64)obj.indexInt64Index(0,1,2,3,dtype=int64)第6页pandas数据结构介绍通常希望所创建Series带有一个能够对各个数据点进行标识索引:7obj2=Series(4,7,-5,3,index=d,b,a,c)obj2d4b7a-5c3dtype:int64obj2.indexIndex(ud,ub,ua,uc,dtype=object)第7页pandas数据结构介绍与普通NumPy数组相比,能
4、够经过索引方式选取Series中单个或一组值:8obj2a-5obj2d=6obj2c,a,dc3a-5d6dtype:int64第8页pandas数据结构介绍NumPy数组运算(如依据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间链接:9obj2obj2obj20obj2*2np.exp(obj2)d403.428793b1096.633158a0.006738c20.085537dtype:float64第9页pandas数据结构介绍还能够将Series看成是一个定长有序字典,因为它是索引值到数据值一个映射。它能够用在许多原本需要字典参数函数中:10binobj2Tru
5、eeinobj2False第10页pandas数据结构介绍11假如数据被存放在一个Python字典中,也能够直接经过这个字典来创建Series:sdata=Ohio:35000,Texas:71000,Oregon:16000,Utah:5000obj3=Series(sdata)obj3Ohio35000Oregon16000Texas71000Utah5000dtype:int64第11页pandas数据结构介绍假如只传入一个字典,则结果Series中索引就是原字典键(有序排列)。在例子中,sdata跟states索引相匹配那3个值会被找出来并放到对应位置上,但因为“California”
6、所对应sdata值找不到,所以其结果就为NaN(即“非数字”(notanumber).12states=California,Ohio,Oregon,Texasobj4=Series(sdata,index=states)obj4CaliforniaNaNOhio35000Oregon16000Texas71000dtype:float64第12页pandas数据结构介绍在pandas中使用NaN表示缺失(missing)或NA值。pandasisnull和notnull函数可用于检测缺失数据:13pd.isnull(obj4)#Series也有类似实例方法:CaliforniaTrue#ob
7、j4.isnull()OhioFalseOregonFalseTexasFalsedtype:boolpd.notnull(obj4)CaliforniaFalseOhioTrueOregonTrueTexasTruedtype:bool第13页pandas数据结构介绍对于许多应用而言,Series域主要一个功效是:它在算术运算中会自动对齐不一样索引数据。14obj3obj4obj3+obj4CaliforniaNaNOhio70000Oregon3Texas14UtahNaNdtype:float64第14页pandas数据结构介绍Series对象本身及其索引都有一个name属性,该属性跟p
8、andas其它关键功效关系非常亲密:15obj4.name=populationobj4.index.name=stateobj4stateCaliforniaNaNOhio35000Oregon16000Texas71000Name:population,dtype:float64第15页pandas数据结构介绍16Series索引能够经过赋值方式就地修改:obj04172-533obj.index=Bob,Steve,Jeff,RyanobjBob4Steve7Jeff-5Ryan3dtype:int64第16页pandas数据结构介绍17oDataFrameDataFrame是一个表格型
9、数据结构,它含有一组有序列,每列能够是不一样值类型(数值、字符串、布尔值等)。DataFrame现有行索引也有列索引,它能够被看做由Series组成字典(共用同一个索引)。跟其它类似数据结构相比(如Rdata.frame),DataFrame中面向行和面向列操作基本上是平衡。其实,DataFrame中数据是以一个或多个二维块存放(而不是列表、字典或別一维数据结构)。第17页pandas数据结构介绍构建DataFrame方法有很多,最惯用一个是直接传入一个由等长列表或NumPy数组组成字典:结果DataFrame会自动加上索引(跟Series一样),且全部列会被有序悱列.18data=state
10、:Ohio,Ohio,Ohio,Nevada,Nevada,year:,pop:1.5,1.7,3.6,2.4,2.9frame=DataFrame(data)frame第18页pandas数据结构介绍假如指定了列序列,则DataFrame列就会按照指定次序迸行排列:跟Series一样,假如传入列在数据中找不到,就会产生NA值:19DataFrame(data,columns=year,state,pop)frame2=DataFrame(data,columns=year,state,pop,debt,index=one,two,three,four,five)frame2frame2.co
11、lumnsIndex(uyear,ustate,upop,udebt,dtype=object)第19页pandas数据结构介绍经过类似字典标识方式或属性方式,能够将DataFrame列获取为一个Series:20frame2stateoneOhiotwoOhiothreeOhiofourNevadafiveNevadaName:state,dtype:objectframe2.yearonetwothreefourfiveName:year,dtype:int64第20页pandas数据结构介绍注意,返冋Series拥有原DataFrame相同索引,且其name属性也已经被对应地设置好了。行
12、也能够经过位置或名称方式进行获取,比如用索引字段ix:21frame2.ixthreeyearstateOhiopop3.6debtNaNName:three,dtype:object第21页pandas数据结构介绍列能够经过赋值方式进行修改。比如,能够给那个空“debt”列赋上一个标量值或一组值:22frame2debt=16.5frame2frame2debt=np.arange(5)frame2第22页pandas数据结构介绍23将列表或数组赋值给某个列时,其长度必须跟DataFrame长度相匹配。假如赋值是一个Series,就会准确匹配DataFrame索引,全部空位都将被填上缺失值:
13、val=Series(-1.2,-1.5,-1.7,index=two,four,five)frame2debt=valframe2第23页pandas数据结构介绍为不存在列赋值会创建出一个新列。关键字del用于删除列:24frame2eastern=frame2.state=Ohioframe2delframe2easternframe2.columnsIndex(uyear,ustate,upop,udebt,dtype=object)第24页pandas数据结构介绍另一个常见数据形式是嵌套字典(也就是字典字典):假如将它传给DataFrame,它就会被解释为:外层字典键作为列,内层键则作
14、为行索引:25pop=Nevada:2.4,:2.9,Ohio:1.5,:1.7,:3.6frame3=DataFrame(pop)frame3frame3.T#也能够对该结果进行转置第25页pandas数据结构介绍内层字典键会被合并、排序以形成最终索引。假如显式指定了索引,则不会这么:由Series组成字典差不多也是一样使用方法:26DataFrame(pop,index=,)frame3pdata=Ohio:frame3Ohio:-1,Nevada:frame3Nevada:2DataFrame(pdata)第26页pandas数据结构介绍27假如设置了DataFrameindex和col
15、umnsname属性,则这些信息也会被显示出来:跟Series一样,values属性也会以二维ndarray形式返回DataFrame中数据:frame3.index.name=year;frame3.columns.name=stateframe3frame3.index.name=year;frame3.columns.name=stateframe3.valuesarray(nan,1.5,2.4,1.7,2.9,3.6)第27页pandas数据结构介绍28假如DataFrame各列数据类型不一样,则值数组数据类型就会选取能兼容全部列数据类型:frame2frame2.valuesarr
16、ay(L,Ohio,1.5,nan,L,Ohio,1.7,-1.2,L,Ohio,3.6,nan,L,Nevada,2.4,-1.5,L,Nevada,2.9,-1.7,dtype=object)第28页pandas数据结构介绍o索引对象pandas索引对象负责管理轴标签和其它元数据(比如轴名称等)。构建Series或DataFrame时,所用到任何数组或其它序列标签都会被转换成一个Index:29obj=Series(range(3),index=a,b,c)index=obj.indexindexIndex(ua,ub,uc,dtype=object)index1:Index(ub,uc,
17、dtype=object)第29页pandas数据结构介绍Index对象是不可修改(immutable),所以用户不能对其进行修改:不可修改性非常主要,因为这么才能使Index对象在多个数据结构之间安全共享:30index1=dTypeError:Indexesdoesnotsupportmutableoperationsindex=pd.Index(np.arange(3)obj2=Series(1.5,-2.5,0,index=index)obj2.indexisindexTrue第30页pandas数据结构介绍除了长得像数组,Index功效也类似一个固定大小集合:每个索引都有一些方法和属
18、性,它们可用于设置逻辑并回答相关该索引所包含数据常见问题。31frame3Ohioinframe3.columnsTrueinframe3.indexFalse第31页pandas数据结构介绍32方法说明append连接另一个Index对象,产生一个新Indexdiff计算差集,并得到一个Indexintersection计算交集union计算并集isin计算一个指示各值是否都包含在参数集合中布尔型数组delete删除索引i处元素,并得到新Indexdrop删除传入值,并得到新Indexinsert将元素插入到索引i处,并得到新Indexis_monotonic当各元素均大于等于前一个元素时,
19、返回Trueis.unique当Index没有重复值时,返回Trueunique计算Index中唯一值数组Index方法和属性方法和属性第32页基本功效o重新索引pandas对象一个主要方法是reindex,其作用是创建一个适应新索引新对象。以之前一个简单示例来说:33obj=Series(4.5,7.2,-5.3,3.6,index=d,b,a,c)objd4.5b7.2a-5.3c3.6dtype:float64第33页基本功效34调用该Seriesreindex将会依据新索引进行重排。假如某个索引值当前不存在,就引入缺失值:obj2=obj.reindex(a,b,c,d,e)obj2a
20、-5.3b7.2c3.6d4.5eNaNobj.reindex(a,b,c,d,e,fill_value=0)Out126:a-5.3b7.2c3.6d4.5e0.0第34页基本功效对于时间序列这么有序数据,重新索引时可能需要做一些插值处理。method选项即可到达此目标,比如,使用ffill能够实现前向值填充:35obj3=Series(blue,purple,yellow,index=0,2,4)obj3.reindex(range(6),method=ffill)0blue1blue2purple3purple4yellow5yellowdtype:object第35页基本功效orein
21、dex(插值)method选项ooo对于DataFrame,reindex能够修改(行)索引、列,或两个都修改。假如仅传入一个序列,则会重新索引行:36参数说明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页基本功效37使用columns关键字即可重新索引列:也能够同时对行和列进行重新索引,而插值则只能按
22、行应用(即轴0):利用ix标签索引功效,重新索引任务能够变得更简练: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页基本功效reindex函数参数38参数说明index 用作索引新序列。既能够是index实例,也能够是其它序列型Python数据结构。Index会被完全使用,就像没有任何复制一样。method插值(填充)方式。fill_value在重新索引过程中,需要引
23、入缺失值时使用替换值.limit前向或后向填充时最大填充量.level 在Multiindex指定级别上匹配简单索引,否则选取其子集copy 默认为True,不论怎样都复制;假如为False,则新旧相等就不复制第38页基本功效o丢弃指定轴上项丢弃某条轴上一个或多个项很简单,只要有一个索引数组或列表即可。因为需要执行一些数据整理和集合逻辑,所以drop方法返回是一个在指定轴上删除了指定值新对象:39obj=Series(np.arange(5,),index=a,b,c,d,e)new_obj=obj.drop(c)new_obja0b1d3e4obj.drop(d,c)第39页基本功效对于Da
24、taFrame,能够刪除任意轴上索引值:40data=DataFrame(np.arange(16).reshape(4,4),index=Ohio,Colorado,Utah,NewYork,columns=one,two,three,four)data.drop(Colorado,Ohio)data.drop(two,axis=1)data.drop(two,four,axis=1)第40页基本功效41o索引、选取和过滤Series索引(obj.)工作方式类似于NumPy数组索引,只不过Series索引值不只是整数。obj=Series(np.arange(4,),index=a,b,c,
25、d)objb1obj11obj2:4c2d3dtype:int32第41页基本功效42objb,a,db1a0d3dtype:int32obj1,3b1d3dtype:int32objobjobjb:cb1c2dtype:int32objb:c=5obja0b5c5d3第43页基本功效对DataFrame进行索引其实就是获取一个或多个列:这种索引方式有几个特殊情况。首先经过切片或布尔型数组选取行:44datatwoOhio1Colorado5Utah9NewYork13datathree,onedata:2datadatathree5第44页基本功效45另一个使用方法是经过布尔型DataFra
26、me(比以下面这个由标量比较运算得出)进行索引:这段代码目标是使DataFrame在语法上更像ndarray。datadatadatadata第45页基本功效为了在DataFrame行上进行标签索引,引入了专门索引字段ix。它能够经过NumPy式标识法以及轴标签从DataFrame中选取行和列子集。这也是一个重新索引简单伎俩:46data.ixColorado,two,threetwo5three6Name:Colorado,dtype:int32data.ixColorado,Utah,3,0,1第46页基本功效47data.ix2one8two9three10four11Name:Utah
27、,dtype:int32data.ix:Utah,twoOhio0Colorado5Utah9Name:two,dtype:int32data.ixdata.three5,:3data.ixColorado,two,threetwo5three6Name:Colorado,dtype:int32第47页基本功效48DataFrame索引选项:类型说明objval选取DataFrame单个列或一组列。在一些特殊情况下会比较便利:布尔型数组(过滤行)、切片(行切片)、布尔型DataFrame(依据条件设置值)。obj.ixval选取DataFrame单个行或一组行。obj.ix:,val选取单个列
28、或列子集。obj.ixval1,val2同时选取行和列。reindex方法将一个或多个轴匹配到新索引。xs方法依据标签选取单行或单列,并返回一个Series。icol、irow方法依据整数位置选取单列或单行,并返回一个Series。get.value,set_value方法依据行标签和列标签选取单个值。第48页基本功效49o算术运算和数据对齐pandas最主要一个功效是,它能够对不一样索引对象进行算术运算。在将对象相加时,假如存在不一样索引对,则结果索引就是该索引正确并集。s1=Series(7.3,-2.5,3.4,1.5,index=a,c,d,e)s2=Series(-2.1,3.6,-
29、1.5,4,3.1,index=a,c,e,f,g)s1s2第49页基本功效将它们相加就会产生:自动数据对齐操作在不重合索引处引入NA值。缺失值会在算术运算过程中传输。50s1+s2Out201:a5.2c1.1dNaNe0.0fNaNgNaNdtype:float64第50页基本功效对于DataFrame,对齐操作会同时发生在行和列上:51df1=DataFrame(np.arange(9,).reshape(3,3),columns=list(bcd),index=Ohio,Texas,Colorado)df2=DataFrame(np.arange(12,).reshape(4,3),c
30、olumns=list(bde),index=Utah,Ohio,Texas,Oregon)df1df2df1+df2#把它们相加后将会返回一个新DataFrame,其索引和列为原来那两个DataFrame并集.第51页基本功效52o在算术方法中填充值在对不一样索引对象进行算术运算时,可能希望当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值(比如0):df1=DataFrame(np.arange(12).reshape(3,4),columns=list(abcd)df2=DataFrame(np.arange(20.).reshape(4,5),columns=list(abcd
31、e)df1df2df1+df2#将它们相加时,没有重合位置就会产生NA值.第52页基本功效使用df1add方法,传入df2以及一个fill_value参数:与这类似,在对Series或DataFrame重新索引时,也能够指定一个填充值:53df1.add(df2,fill_value=0)df1.reindex(columns=df2.columns,fill_value=0)灵活算术方法add用于加法(+)方法sub用于减法(-)方法div用于除法(/)方法mul用于乘法(*)方法第53页基本功效oDataFrame和Series之间运算跟NumPy数组一样,DataFrame和Series
32、之间算术运算也是有明确要求。先来看一个含有启发性例子,计算一个二维数组与其某行之间差:54arr=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-arr0array(0.,0.,0.,0.,4.,4.,4.,4.,8.,8.,8.,8.)第54页基本功效这就叫做广播(broadcasting)。DataFrame和Series之间运算差不多也是如此:默认情况下,DataFrame和Series之间算术运算会将Series索引匹配到DataFra
33、me列,然后沿着行一直向下广播.55frame=DataFrame(np.arange(12.).reshape(4,3),columns=list(bde),index=Utah,Ohio,Texas,Oregon)series=frame.ix0frameseriesframe-series第55页基本功效假如某个索引值在DataFrame列或Series索引中找不到,则参加运算两个对象就会被重新索引以形成并集:假如希望匹配行且在列上广播,则必须使用算术运算方法。比如:传入轴号就是希望匹配轴。在本例中目标是匹配DauFrame行索引并进行广播。56series2=Series(range(
34、3),index=b,e,f)frame+series2series3=framedseries3frame.sub(series3,axis=0)第56页基本功效57o函数应用和映射NumPyufuncs(元素级数组方法)也可用于操作pandas对象:frame=DataFrame(np.random.randn(4,3),columns=list(bde),index=Utah,Ohio,Texas,Oregon)framenp.abs(frame)第57页基本功效另一个常见操作是,将函数应用到由各列或行所形成一维数组上。DataFrameapply方法即可实现此功效:许多最为常见数组统计
35、功效都被实现成DataFrame方法(如sum和mean),所以无需使用apply方法。58f=lambdax:x.max()-x.min()frame.apply(f)frame.apply(f,axis=1)第58页基本功效59除标量值外,传递给apply函数还能够返回由多个值组成Series:deff(x):returnSeries(x.min(),x.max(),index=min,max)frameframe.apply(f)第59页基本功效60o另外,元素级Python函数也是能够用。假如想得到frame中各个浮点值格式化字符串,使用applymap即可:oo之所以叫做applym
36、ap,是因为Series有一个用于应用元素级函数map方法:format=lambdax:%.2f%xframe.applymap(format)framee.map(format)第60页基本功效o排序和排名依据条件对数据集排序(sorting)也是一个主要内置运算。要对行或列索引进行排序(按字典次序),可使用sort_index方法,它将返回一个已排序新对象:61obj=Series(range(4),index=d,a,b,c)obj.sort_index()a1b2c3d0dtype:int64第61页基本功效62而对于DataFrame,则能够依据任意一个轴上索引进行排序:数据默认是
37、按升序排序,但也能够降序排序: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页基本功效若要按值对Series进行徘序,可使用其order方法:63obj=Series(4,7,-3,2)obj.order()2-3320417obj=Series(4,np.nan,1,np.nan,-3,2)obj.order()#在排序时,
38、缺失值默认都会被放到Series末尾.4-32152041NaN3NaN第63页基本功效o在DataFrame上,可能希望根据一个或多个列中值进行排序。将一个或多个列名字传递给by选项即可达到该目标:o要根据多个列进行排序,传入名称列表即可:64frame=DataFrame(b:4,7,-3,2,a:0,1,0,1)frameframe.sort_index(by=b)frame.sort_index(by=a,b)第64页基本功效65排名(ranking)跟排序关系亲密,且它会增设一个排名值(从1开始,一直到数组中有效数据数量)。它跟numpy.argsort产生间接排序索引差不多,只不过
39、它能够依据某种规则破坏平级关系。Series和DataFramerank方法:默认情况下,rank是经过“为各组分配一个平均排名”方式破坏平级关系:obj=Series(7,-5,7,4,2,0,4)obj071-52734425064printobj.rank()06.511.026.534.543.052.064.5第65页基本功效66obj.rank(method=first)#依据值在原数据中出现次序给出排名:06112734435265obj.rank(ascending=False,method=max)#按降序进行排名:02172234455664第66页基本功效DataFram
40、e能够在行或列上计算排名:67排名时用于破坏平级关系method选项Method说明average默认:在相等分组中,为各个值分配平均排名min使用整个分组最小排名max使用整个分组最大排名first按值在原始数据中出现次序分配排名frame=DataFrame(b:4.3,7,-3,2,a:0,1,0,1,c:-2,5,8,-2.5)frameframe.rank(axis=1)第67页基本功效o带有重复值轴索引带有重复索引值Series:索引is_unique属性验证是否是唯一:68obj=Series(range(5),index=a,a,b,b,c)obja0a1b2b3c4obj.i
41、ndex.is_uniqueFalse第68页基本功效对于带有重复值索引,数据选取行为将会有些不一样。假如某个索引对应多个值,则返回一个Series;而对应单个值,则返回一个标量值。对DataFrame行进行索引时也是如此:69objaa0a1objc4df=DataFrame(np.random.randn(4,3),index=a,a,b,b)dfdf.ixb第69页汇总和计算描述统计pandas对象拥有一组惯用数学和统计方法。它们大部分都属于约简和汇总统计,用于从Series中提取个值(如sum或mean)或从DataFrame行或列中提取一个Series。跟对应NumPy数组方法相比,
42、它们都是基于没有缺失数据假设而构建。接下来看一个简单DataFrame:70df=DataFrame(1.4,np.nan,7.1,-4.5,np.nan,np.nan,0.75,-1.3,index=a,b,c,d,columns=one,two)df第70页汇总和计算描述统计调用DataFramesum方法将会返回一个含有列小计Series:71df.sum()one9.25two-5.80dtype:float64#传入axis=1将会按行进行求和运算:df.sum(axis=1)a1.40b2.60cNaNd-0.55dtype:float64第71页汇总和计算描述统计NA值会自动被排
43、除,除非整个切片(这里指是行或列)都是NA。经过skipna选项可以禁用该功效:72df.mean(axis=1,skipna=False)aNaNb1.300cNaNd-0.275dtype:float64约简方法选项选项说明axis约简轴。DataFrame行用0,列用1skipna 排除缺失值,默认值为Truelevel假如轴是层次化索引(即Multiindex),则依据level分组约简第72页汇总和计算描述统计有些方法(如idxmin和idxmax)返回是间接统计(比如到达最小值或最大值索引):还有一个方法,它既不是约简型也不是累计型。describe就是一个例子,它用于一次性产生多
44、个汇总统计:73df.idxmax()onebtwoddf.cumsum()#累计型计算df.describe()第73页汇总和计算描述统计对于非数值型数据,describe会产生另外一个汇总统计:74obj=Series(a,a,b,c*4)objobj.describe()count16unique3topafreq8dtype:object第74页汇总和计算描述统计描述和汇总统计:75方法说明count非NA值数量describe针对Series或各DataFrame列计算汇总统计min,max计算最小值和最大值argmin,argmax计算能够获取到最小值和最大值索引位置(整数)idx
45、min,idxmax计算能够获取到最小值和最大值索引值quantile计算样本分位数(0到1)sum值总和mean值平均数media值算术中位数(50%分位数)mad依据平均值计算平均绝对离差var样本值方差第75页汇总和计算描述统计描述和汇总统计(续)76方法说明std样本值标准差skew样本值偏度(三阶矩)kurt样本值峰度(四阶矩)cumsum样本值累计和cummin,cummax样本值累计最大值和累计最小cumprod样本值累计积diff计算一阶差分(对时间序列很有用)pct_change计算百分数改变第76页汇总和计算描述统计o相关系数与协方差有些汇总统计(如相关系数和协方差)是经过
46、参数对计算出来。下面几个DataFrame数据来自Yahoo!Finance股票价格和成交量:77importpandas.io.dataasweball_data=fortickerinAAPL,IBM,MSFT,GOOG:all_dataticker=web.get_data_yahoo(ticker,1/1/,1/1/)price=DataFrame(tic:dataAdjClosefortic,datainall_data.iteritems()volume=DataFrame(tic:dataVolumefortic,datainall_data.iteritems()第77页汇总和
47、计算描述统计接下来计算价格百分数改变:Seriescorr方法用于计算两个Series中重合、非NA、按索引对齐值相关系数。与这类似,cov用干计算协方差:78returns=price.pct_change()returns.tail()returns.MSFT.corr(returns.IBM)0.4959797005319returns.MSFT.cov(returns.IBM)0.00021595764765417841第78页汇总和计算描述统计DataFramecorr和cov方法将以DataFrame形式返回完整相关系数或协方差矩阵:利用DataFramecorrwith方法,能够
48、计算其列或行跟另一个Series或DataFrame之间相关系数。传入一个Series将会返回一个相关系数值Series(针对各列进行计算):79returns.corr()returns.cov()returns.corrwith(returns.IBM)AAPL0.410011GOOG0.390689IBM1.000000MSFT0.495980第79页汇总和计算描述统计o传入一个DataFrame则会计算按列名配正确相关系数。下面计算了百分比变化与成交量相关系数:o传入axis=1即可按行进行计算。不论怎样,在计算相关系数之前,全部数据项都会按标签对齐。80returns.corrwit
49、h(volume)AAPL-0.057549GOOG0.062647IBM-0.007892MSFT-0.014245dtype:float64第80页汇总和计算描述统计o唯一值、值计数以及组员资格还有一类方法可以从一维Series值中抽取信息。以下面这个Series为例:返回唯一值是未排序,假如需要话,能够对结果再次进行排序(uniques.sort()。value_counts用于计算一个Series中各值出现频率:81obj=Series(c,a,d,a,a,b,b,c,c)#函数是unique,它能够得到Series中唯一值数组:uniques=obj.unique()uniquesa
50、rray(c,a,d,b,dtype=object)第81页汇总和计算描述统计为了便于査看,结果Series是按值频率降序排列。value_counts还是一个顶级pandas方法,可用于任何数组或序列:82obj.value_counts()c3a3b2d1dtype:int64pd.value_counts(obj.values,sort=False)a3c3b2d1dtype:int64第82页汇总和计算描述统计最终是isin,它用于判断矢量化集合组员资格,可用于选取Series中或DataFrame列中数据子集:83mask=obj.isin(b,c)mask0True1False2F