8Python科学计算与数据处理PPT资料.ppt
《8Python科学计算与数据处理PPT资料.ppt》由会员分享,可在线阅读,更多相关《8Python科学计算与数据处理PPT资料.ppt(115页珍藏版)》请在冰豆网上搜索。
由于没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。
可以通过Series的values和index属性获取其数组表示形式和索引对象:
6,obj.valuesarray(4,7,-5,3,dtype=int64)obj.indexInt64Index(0,1,2,3,dtype=int64),pandas的数据结构介绍,通常希望所创建的Series带有一个可以对各个数据点进行标记的索引:
7,obj2=Series(4,7,-5,3,index=d,b,a,c)obj2d4b7a-5c3dtype:
int64obj2.indexIndex(ud,ub,ua,uc,dtype=object),pandas的数据结构介绍,与普通NumPy数组相比,可以通过索引的方式选取Series中的单个或一组值:
8,obj2a-5obj2d=6obj2c,a,dc3a-5d6dtype:
int64,pandas的数据结构介绍,NumPy数组运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接:
9,obj2obj2obj20obj2*2np.exp(obj2)d403.428793b1096.633158a0.006738c20.085537dtype:
float64,pandas的数据结构介绍,还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。
它可以用在许多原本需要字典参数的函数中:
10,binobj2Trueeinobj2False,pandas的数据结构介绍,11,如果数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series:
sdata=Ohio:
35000,Texas:
71000,Oregon:
16000,Utah:
5000obj3=Series(sdata)obj3Ohio35000Oregon16000Texas71000Utah5000dtype:
int64,pandas的数据结构介绍,如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)。
在例子中,sdata跟states索引相匹配的那3个值会被找出来并放到相应的位置上,但由于“California”所对应的sdata值找不到,所以其结果就为NaN(即“非数字”(notanumber).,12,states=California,Ohio,Oregon,Texasobj4=Series(sdata,index=states)obj4CaliforniaNaNOhio35000Oregon16000Texas71000dtype:
float64,pandas的数据结构介绍,在pandas中使用NaN表示缺失(missing)或NA值。
pandas的isnull和notnull函数可用于检测缺失数据:
13,pd.isnull(obj4)#Series也有类似的实例方法:
CaliforniaTrue#obj4.isnull()OhioFalseOregonFalseTexasFalsedtype:
boolpd.notnull(obj4)CaliforniaFalseOhioTrueOregonTrueTexasTruedtype:
bool,pandas的数据结构介绍,对于许多应用而言,Series域重要的一个功能是:
它在算术运算中会自动对齐不同索引的数据。
14,obj3obj4obj3+obj4CaliforniaNaNOhio70000Oregon32000Texas142000UtahNaNdtype:
float64,pandas的数据结构介绍,Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:
15,obj4.name=populationobj4.index.name=stateobj4stateCaliforniaNaNOhio35000Oregon16000Texas71000Name:
population,dtype:
float64,pandas的数据结构介绍,16,Series的索引可以通过赋值的方式就地修改:
obj04172-533obj.index=Bob,Steve,Jeff,RyanobjBob4Steve7Jeff-5Ryan3dtype:
int64,pandas的数据结构介绍,17,DataFrameDataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
跟其他类似的数据结构相比(如R的data.frame),DataFrame中面向行和面向列的操作基本上是平衡的。
其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或別的一维数据结构)。
pandas的数据结构介绍,构建DataFrame的办法有很多,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典:
结果DataFrame会自动加上索引(跟Series一样),且全部列会被有序悱列.,18,data=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,pandas的数据结构介绍,如果指定了列序列,则DataFrame的列就会按照指定顺序迸行排列:
跟Series一样,如果传入的列在数据中找不到,就会产生NA值:
19,DataFrame(data,columns=year,state,pop),frame2=DataFrame(data,columns=year,state,pop,debt,index=one,two,three,four,five)frame2frame2.columnsIndex(uyear,ustate,upop,udebt,dtype=object),pandas的数据结构介绍,通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:
20,frame2stateoneOhiotwoOhiothreeOhiofourNevadafiveNevadaName:
state,dtype:
objectframe2.yearone2000two2001three2002four2001five2002Name:
year,dtype:
int64,pandas的数据结构介绍,注意,返冋的Series拥有原DataFrame相同的索引,且其name属性也已经被相应地设置好了。
行也可以通过位置或名称的方式进行获取,比如用索引字段ix:
21,frame2.ixthreeyear2002stateOhiopop3.6debtNaNName:
three,dtype:
object,pandas的数据结构介绍,列可以通过赋值的方式进行修改。
例如,可以给那个空的“debt”列赋上一个标量值或一组值:
22,frame2debt=16.5frame2frame2debt=np.arange(5)frame2,pandas的数据结构介绍,23,将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。
如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值:
val=Series(-1.2,-1.5,-1.7,index=two,four,five)frame2debt=valframe2,pandas的数据结构介绍,为不存在的列赋值会创建出一个新列。
关键字del用于删除列:
24,frame2eastern=frame2.state=Ohioframe2delframe2easternframe2.columnsIndex(uyear,ustate,upop,udebt,dtype=object),pandas的数据结构介绍,另一种常见的数据形式是嵌套字典(也就是字典的字典):
如果将它传给DataFrame,它就会被解释为:
外层字典的键作为列,内层键则作为行索引:
25,pop=Nevada:
2001:
2.4,2002:
2.9,Ohio:
2000:
1.5,2001:
1.7,2002:
3.6,frame3=DataFrame(pop)frame3frame3.T#也可以对该结果进行转置,pandas的数据结构介绍,内层字典的键会被合并、排序以形成最终的索引。
如果显式指定了索引,则不会这样:
由Series组成的字典差不多也是一样的用法:
26,DataFrame(pop,index=2001,2002,2003),frame3pdata=Ohio:
frame3Ohio:
-1,Nevada:
frame3Nevada:
2DataFrame(pdata),pandas的数据结构介绍,27,如果设置了DataFrame的index和columns的name属性,则这些信息也会被显示出来:
跟Series一样,values属性也会以二维ndarray的形式返回DataFrame中的数据:
frame3.index.name=year;
frame3.columns.name=stateframe3,frame3.index.name=year;
frame3.columns.name=stateframe3.valuesarray(nan,1.5,2.4,1.7,2.9,3.6),pandas的数据结构介绍,28,如果DataFrame各列的数据类型不同,则值数组的数据类型就会选用能兼容所有列的数据类型:
frame2frame2.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),pandas的数据结构介绍,索引对象pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。
构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index:
29,obj=Seri