8Python科学计算与数据处理.ppt
- 文档编号:18074228
- 上传时间:2023-08-12
- 格式:PPT
- 页数:115
- 大小:441KB
8Python科学计算与数据处理.ppt
《8Python科学计算与数据处理.ppt》由会员分享,可在线阅读,更多相关《8Python科学计算与数据处理.ppt(115页珍藏版)》请在冰点文库上搜索。
1,pandas,入门,目录,pandas的数据结构介绍SeriesDataFrame索引对象基本功能重新索引丢弃指定轴上的项索引、选取和过滤算术运算和数据对齐函数应用和映射排序和排名带有重复值的轴索引,2,目录,汇总和计算描述统计相关系数与协方差唯一值、值计数以及成员资格处理缺失数据滤除缺失数据填充缺失数据层次化索引重排分级顺序根据级别汇总统计使用DataFrame的列其他有关pandas的话题,3,4,pandas含有使数据分析工作变得更快更简单的高级数据结构和操作工具。
它是基于NumPy构建的,让以NumPy为中心的应用变得更加简单。
因为Series和DataFrame用的次数非常多,所以将其引入本地命名空间中会更方便。
frompandasimportSeries,DataFrameimportpandasaspd,pandas的数据结构介绍,SeriesSeries是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。
仅由一组数据即可产生最简单的Series:
5,obj=Series(4,7,-5,3)obj04172-533dtype:
int64,pandas的数据结构介绍,Series的字符串表现形式为:
索引在左边,值在右边。
由于没有为数据指定索引,于是会自动创建一个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=Series(range(3),index=a,b,c)index=obj.indexindexIndex(ua,ub,uc,dtype=object)index1:
Index(ub,uc,dtype=object),pandas的数据结构介绍,Index对象是不可修改的(immutable),因此用户不能对其进行修改:
不可修改性非常重要,因为这样才能使Index对象在多个数据结构之间安全共享:
30,index1=dTypeError:
Indexesdoesnotsupportmutableoperations,index=pd.Index(np.arange(3)obj2=Series(1.5,-2.5,0,index=index)obj2.indexisindexTrue,pandas的数据结构介绍,除了长得像数组,Index的功能也类似一个固定大小的集合:
每个索引都有一些方法和属性,它们可用于设置逻辑并回答有关该索引所包含的数据的常见问题。
31,frame3Ohioinframe3.columnsTrue2003inframe3.indexFalse,pandas的数据结构介绍,32,Index的方法和属性,基本功能,重新索引pandas对象的一个重要方法是reindex,其作用是创建一个适应新索引的新对象。
以之前的一个简单示例来说:
33,obj=Series(4.5,7.2,-5.3,3.6,index=d,b,a,c)objd4.5b7.2a-5.3c3.6dtype:
float64,基本功能,34,调用该Series的reindex将会根据新索引进行重排。
如果某个索引值当前不存在,就引入缺失值:
obj2=obj.reindex(a,b,c,d,e)obj2a-5.3b7.2c3.6d4.5eNaNobj.reindex(a,b,c,d,e,fill_value=0)Out126:
a-5.3b7.2c3.6d4.5e0.0,基本功能,对于时间序列这样的有序数据,重新索引时可能需要做一些插值处理。
method选项即可达到此目的,例如,使用ffill可以实现前向值填充:
35,obj3=Series(blue,purple,yellow,index=0,2,4)obj3.reindex(range(6),method=ffill)0blue1blue2purple3purple4yellow5yellowdtype:
object,基本功能,reindex的(插值)method选项对于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,基本功能,37,使用columns关键字即可重新索引列:
也可以同时对行和列进行重新索引,而插值则只能按行应用(即轴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,基本功能,reindex函数的参数,38,参数说明index用作索引的新序列。
既可以是index实例,也可以是其他序列型的Python数据结构。
Index会被完全使用,就像没有任何复制一样。
method插值(填充)方式。
fill_value在重新索引的过程中,需要引入缺失值时使用的替代值.limit前向或后向填充时的最大填充量.level在Multiindex的指定级别上匹配简单索引,否则选取其子集copy默认为True,无论如何都复制;如果为False,则新旧相等就不复制,基本功能,丢弃指定轴上的项丢弃某条轴上的一个或多个项很简单,只要有一个索引数组或列表即可。
由于需要执行一些数据整理和集合逻辑,所以drop方法返回的是一个在指定轴上删除了指定值的新对象:
39,obj=Series(np.arange(5,),index=a,b,c,d,e)new_obj=obj.drop(c)new_obja0b1d3e4obj.drop(d,c),基本功能,对于DataFrame,可以刪除任意轴上的索引值:
40,data=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),基本功能,41,索引、选取和过滤Series索引(obj.)的工作方式类似于NumPy数组的索引,只不过Series的索引值不只是整数。
obj=Series(np.arange(4,),index=a,b,c,d)objb1obj11obj2:
4c2d3dtype:
int32,基本功能,42,objb,a,db1a0d3dtype:
int32obj1,3b1d3dtype:
int32objobj2a0b1dtype:
int32,基本功能,利用标签的切片运算与普通的Python切片运算不同,当使用非整数作为切片索引时,其末端是包含的(inclusive)设置的方式也很简单:
43,objb:
cb1c2dtype:
int32,objb:
c=5obja0b5c5d3,基本功能,对DataFrame进行索引其实就是获取一个或多个列:
这种索引方式有几个特殊的情况。
首先通过切片或布尔型数组选取行:
44,datatwoOhio1Colorado5Utah9NewYork13datathree,one,data:
2datadatathree5,基本功能,45,另一种用法是通过布尔型DataFrame(比如下面这个由标量比较运算得出的)进行索引:
这段代码的目的是使DataFrame在语法上更像ndarray。
datadatadatadata,基本功能,为了在DataFrame的行上进行标签索引,引入了专门的索引字段ix。
它可以通过NumPy式的标记法以及轴标签从DataFrame中选取行和列的子集。
这也是一种重新索引的简单手段:
46,data.ixColorado,two,threetwo5three6Name:
Colorado,dtype:
int32data.ixColorado,Utah,3,0,1,基本功能,47,data.ix2one8two9three10four11Name:
Utah,dtype:
int32data.ix:
Utah,twoOhio0Colorado5Utah9Name:
two,dtype:
int32data.ixdata.three5,:
3data.ixColorado,two,threetwo5three6Name:
Colorado,dtype:
int32,基本功能,48,DataFrame的索引选项:
类型说明objval选取DataFrame的单个列或一组列。
在一些特殊情况下会比较便利:
布尔型数组(过滤行)、切片(行切片)、布尔型DataFrame(根据条件设置值)。
obj.ixval选取DataFrame的单个行或一组行。
obj.ix:
val选取单个列或列子集。
obj.ixval1,val2同时选取行和列。
reindex方法将一个或多个轴匹配到新索引。
xs方法根据标签选取单行或单列,并返回一个Series。
icol、irow方法根据整数位置选取单列或单行,并返回一个Series。
get.value,set_value方法根据行标签和列标签选取单个值。
基本功能,49,算术运算和数据对齐pandas最重要的一个功能是,它可以对不同索引的对象进行算术运算。
在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。
s1=Series(7.3,-2.5,3.4,1.5,index=a,c,d,e)s2=Series(-2.1,3.6,-1.5,4,3.1,index=a,c,e,f,g)s1s2,基本功能,将它们相加就会产生:
自动的数据对齐操作在不重叠的索引处引入NA值。
缺失值会在算术运算过程中传播。
50,s1+s2Out201:
a5.2c1.1dNaNe0.0fNaNgNaNdtype:
float64,基本功能,对于DataFrame,对齐操作会同时发生在行和列上:
51,df1=DataFrame(np.arange(9,).reshape(3,3),columns=list(bcd),index=Ohio,Texas,Colorado)df2=DataFrame(np.arange(12,).reshape(4,3),columns=list(bde),index=Utah,Ohio,Texas,Oregon)df1df2df1+df2#把它们相加后将会返回一个新的DataFrame,其索引和列为原来那两个DataFrame的并集.,基本功能,52,在算术方法中填充值在对不同索引的对象进行算术运算时,可能希望当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值(比如0):
df1=DataFrame(np.arange(12).reshape(3,4),columns=list(abcd)df2=DataFrame(np.arange(20.).reshape(4,5),columns=list(abcde)df1df2df1+df2#将它们相加时,没有重叠的位置就会产生NA值.,基本功能,使用df1的add方法,传入df2以及一个fill_value参数:
与此类似,在对Series或DataFrame重新索引时,也可以指定一个填充值:
53,df1.add(df2,fill_value=0),df1.reindex(columns=df2.columns,fill_value=0),灵活的算术方法add用于加法(+)的方法sub用于减法(-)的方法div用于除法(/)的方法mul用于乘法(*)的方法,基本功能,DataFrame和Series之间的运算跟NumPy数组一样,DataFrame和Series之间算术运算也是有明确规定的。
先来看一个具有启发性的例子,计算一个二维数组与其某行之间的差:
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-arr0array(0.,0.,0.,0.,4.,4.,4.,4.,8.,8.,8.,8.),基本功能,这就叫做广播(broadcasting)。
DataFrame和Series之间的运算差不多也是如此:
默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播.,55,frame=DataFrame(np.arange(12.).reshape(4,3),columns=list(bde),index=Utah,O
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 科学 计算 数据处理
![提示](https://static.bingdoc.com/images/bang_tan.gif)