(高职)12.2 pandas模块ppt课件.pptx
12.2 pandas模块Python Python 程序设计程序设计丁辉丁辉 商俊燕商俊燕 范晓玲范晓玲第十二章第十二章 数据处理数据处理u12.1 numpy模块模块u12.2 pandas模块模块u12.3 matplotlib模块模块u12.4 大数据处理精选案例大数据处理精选案例u小结小结2022年5月8日32022年5月8日4pandas 是基于numpy构建的含有更高级数据结构和工具的数据分析包,是一个专门用于数据分析的开源Python库。目前,所有使用Python语言研究和分析数据集的专业人士,在做统计分析和决策时,pandas都是他们的基础工具。它能够以最简单的方式提供数据处理、数据抽取和数据操作所需的全部工具。 l pandas引入 from pandas import Series,DataFrame import pandas as pdlSeries对象 Series对象类似numpy数组的数据结构,同时每个元素带有标签(lable)或者说索引(index)。支持float、int、bool、datatime、timedelta、category、object类型。创建Series对象可以使用Series()构造函数来声明,把要存放在Series对象中的数据以数组形式传入。 import pandas as pd from pandas import Series,DataFrame sn = Series(1,2,3,as) print (sn)0 11 22 33Asdtype: object sn = Series(1,2,3,as,index=a,b,c,d) #增加索引参数 print (sn)a 1b 2c 3d asdtype: object print(sn.index)Index(a, b, c, d, dtype=object) print(sn.values)1,2,3, as12.2 pandas模块选择Series内部元素 sn = Series(1,2,3,4,index=a,b,c,d) print(sn2,snc) print(sn0:2)3 3a 1b 2dtype: int64 2022年5月8日5lDataFrame对象 DataFrame对象是一种二维的表结构,类似Excel中的工作表。pandas的DataFrame可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。DataFrame由按一定顺序排列的多列数据组成,各列的数据类型可以不同。创建DataFrame对象 import pandas as pd from pandas import Series,DataFrame data = id: 2000, 2001, 2002,name: lily, apple, micky,age: 15, 17,19 #从字典创建 frame1 = DataFrame(data) print(frame1) i d name age0 2000 lily 151 2001 apple 172 2002 micky 19 选取元素使用DataFram对象中的columns属性,可以获取DataFram中所有列。 fc = frame1.columns print(fc)Index(id, name, age, dtype=object)DataFram对象中的index属性获取索引列表,values属性获取所有元素。 print(frame1.index)RangeIndex(start=0, stop=3, step=1) print(frame1.values)2000 lily 15 2001 apple 17 2002 micky 1912.2 pandas模块2022年5月8日6l DataFrame对象使用ix属性能获取DataFram对象中的行。 fr = frame1.ix0 fr1 = frame1.ix1 fr2 = frame1.ix0.:1 print(fr)id 2000name lilyage 15Name: 0, dtype: object print(fr1)id 2001name appleage 17Name: 1, dtype: object print(fr2)id name age0 2000 lily 151 2001 apple 17函数应用 frame2 = pd.DataFrame(np.arange(6).reshape(2,3),columns=id,name,age) fs = np.sqrt(frame2) fm = np.max(frame2) fmean = np.mean(frame2) print(frame2) id name age0 0 1 21 3 4 5 print(fs) id name age0 0.000000 1.0 1.4142141 1.732051 2.0 2.236068 print(fm)id 3name 4age 5dtype: int32print(fmean) id 1.5name 2.5age 3.5dtype: float6412.2 pandas模块2022年5月8日7l DataFrame对象NaN数据处理 from pandas import Series,DataFrame import numpy as np import pandas as pd ser = pd.Series(0,1,np.NaN,3,index=red,blue,white,green) print(ser)red 0.0blue 1.0white NaNgreen 3.0dtype: float64 ser.dropna() #过滤掉缺失值red 0.0blue 1.0green 3.0dtype: float64 frame1 = pd.DataFrame(1,np.NaN,np.NaN,2,np.NaN,np.NaN,columns=id,name,age) f = frame1.dropna() #只要有NaN,则整列或整行被删除 print(f) Empty DataFrameColumns: id, name, ageIndex: 12.2 pandas模块2022年5月8日8lDataFrame对象 print (frame1.dropna(how=all) #只会删除全列或行都为NaN的列或行 id name age0 1 NaN NaN1 2 NaN NaN print(frame1.fillna(5) #用一个值替换NaN id name age0 1 5.0 5.01 2 5.0 5.0 print(frame1.fillna(name:zhanglin,age:25) id name age0 1 zhanglin 25.01 2 zhanglin 25.012.2 pandas模块2022年5月8日9l 数据集成 在Python中,panda.merge()函数可根据一个或多个键将不同DataFrame中的行连接起来;pandas.concat()函数可以沿着一条轴将多个对象堆叠到一起。使用merge()函数进行合并merge()函数的格式为:merge(left, right, how=inner, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=(_x, _y), copy=True, indicator=False) left与与right:两个不同的DataFrame。how:指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接),默认为inner。on : 指的是用于连接的列索引名称。必须存在左右两个DataFrame对象中,如果没有指定且其它参数也未指定则以两个DataFrame的重叠列名做为连接键。left_on:左则DataFrame中用作连接键的列名。当两个DataFrame对象中没有相同列名,但有含义相同的列时,就可以使用这个参数。right_on:与left_on配合使用,右则DataFrame中用作连接键的列名。left_index:使用左则DataFrame中的行索引作为连接键。right_index:使用右则DataFrame中的行索引作为连接键。sort:默认为True,将合并的数据进行排序。在大多数情况下设置为False可以提高性能suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为(_x,_y)。copy:默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能。 12.2 pandas模块2022年5月8日10l 数据集成frame1 = pd.DataFrame(id:101,102,103,name:lily,mike,jerry)frame2 = pd.DataFrame(id:101,102,104,score:84,93,76) #对两个DataFrame对象应用merge()函数,执行合并操作 print(pd.merge(frame1,frame2) #默认按id进行合并 id name score0 101 lily 841102 mike 93 frame1 = pd.DataFrame(id:101,102,103,name:lily,mike,jerry) frame2 = pd.DataFrame(sid:101,102,104,score:84,93,76) print(fml=pd.merge(frame1,frame2, left_on=id,right_on=sid)#设置left_on=id、 right_on=sid,将frame1对象中的id和frame2对象中的sid作为连接键 id name sid score0 101 lily 101 841102 mike 102 93 frame1 = pd.DataFrame(id:101,102,103,name:lily,mike,jerry) frame2 = pd.DataFrame(id:101,102,104,score:84,93,76) fml = pd.merge(frame1,frame2, how=left,) #不同的合并方式 fmr = pd.merge(frame1,frame2, how=right) fmo = pd.merge(frame1,frame2, how=outer) fmi = pd.merge(frame1,frame2, how=inner) print(fml) id name score0 101 lily 84.01 102 mike 93.02 103 jerry NaN12.2 pandas模块2022年5月8日11l 数据集成 print(fmr) id name score0 101 lily 841 102 mike 932 104 NaN 76 print(fmo) id name score0 101 lily 84.01 102 mike 93.02 103 jerry NaN3 104 NaN 76.0 print(fmi) id name score0 101 lily 841 102 mike 9312.2 pandas模块2022年5月8日12l 数据集成使用concat()函数进行拼接concat()函数的格式为:concat(objs, axis=0, join=outer, join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True) objs:参与连接的列表或字典,且列表或字典里的对象是pandas数据类型,唯一必须给定的参数。axis:指明连接的轴向,0是纵轴,1是横轴,默认是0。join:“inner”(交集),“outer”(并集),默认是“outer”。 frame1 = pd.DataFrame(id:101,102,103,105,name:lily,mike,jerry,tom) frame2 = pd.DataFrame(id:101,102,104,name:lily,mike,peppg) print(pd.concat(frame1,frame2,axis=0) #axis=0,纵轴连接 id name0 101 lily1 102 mike2 103 jerry3 105 tom0 101 lily1 102 mike2 104 peppg print(pd.concat(frame1,frame2,axis=1) #横轴连接 id name id name0 101 lily 101 lily1 102 mike 102 mike2 103 jerry 104 peppg3 105 tom NaN NaN12.2 pandas模块2022年5月8日13l 数据集成 frame1 = pd.DataFrame(id:101,102,103,105,name:lily,mike,jerry,tom) frame2 = pd.DataFrame(id:101,102,104,name:lily,mike,peppg) fco = pd.concat(frame1,frame2,axis=1,join=outer) #并集 fc = pd.concat(frame1,frame2,axis=1,join=inner) #交集 print(fco) id name id name0 101 lily 101 lily1 102 mike 102 mike2 103 jerry 104 peppg3 105 tom NaN NaN print(fc) id name id name0 101 lily 101 lily1 102 mike 102 mike2 103 jerry 104 peppg12.2 pandas模块2022年5月8日14【例12-1】dianying.csv中包含多个城市中多部电影的票房信息,要求任选dianying.csv中某部电影统计其上映天数和日平均票房。分析:dianyig.csv文件中包含有电影名称、上映时间、下线时间、公司、导演、主演、类型、票房、城市信息。首先筛选出该电影的电影名称、电影上映时间、下线时间、票房信息等列;接着对筛选出的信息进行去重、去空等清洗处理;再将新数据进行格式转换;最后统计电影的上映天数和日平均票房。#eg12_1.py#导入pandas库import pandas as pd #读入csv中的数据,以“;”作为分割添加字段名df = pd.read_csv(dianying.csv,delimiter=;,encoding=utf-8,names=电影名称,上线时间,下线时间,公司,导演,主演,类型,票房,城市) #筛选影片冲上云霄数据dyxx = dfdf电影名称=冲上云霄.loc:,电影名称,上线时间,下线时间,票房,城市 #去重处理dyxx = dyxx.drop_duplicates().reset_index().drop(index,axis=1) #去除票房列多余的字符票房(万),且转为float类型 dyxx票房 = dyxx票房.str.split()).str1.astype(float) #将时间列转换datetime时间类型dyxx上线时间 = pd.to_datetime(dyxx上线时间)dyxx下线时间 = pd.to_datetime(dyxx下线时间)#计算上映总天数day = (dyxx下线时间.max()-dyxx上线时间.min().days+1 #计算总票房box = dyxx票房.sum() #计算平均票房 avg_box = box/day #输出计算结果print(dyxx电影名称0,电影上映:,day,天,;日平均票房:,avg_box) 12.2 pandas模块2022年5月8日15