还剩14页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
登分表.X1SX的数据内容截图.导入pandas并设置其别名importpandasaspd#pd是pandas的别名,在程序中可以用pd代替pandas读取Excel文件#通过pd上的read_excel函数读取excel文件#read_excel函数执行的结果是一个表格,这个表格赋值给了dfdf=pd.read_excel(登分表.xlsx)
3.行、歹!]、单元格的访问⑴行的访问
①切片方式访问在交互窗口中直接输入之所以结果不同,因为index为0的同学语文成绩为nan(空数据),在计算1班语文平均分的时候mean统计函数会忽略它,用其它有数值的语文成绩求平均,所以1班的语文平均分发生了变化index为0的同学姓名为None(空数据),count统计的时候会略过他,他是团员,略过之后,团员就少了一位,所以统计的团员数量变成了
98.DataFrame对象的结构一个DataFrame对象由若干个Series对象组成,如图
8.
1、
8.2所示如果把DataFrame对象看成一个表格,那么Series对象就是列,一个表格由多列组成图
8.1DataFrame的结构Series对象表示DataFrame中的列,Series除了包含列中的每一个数据项,还包含了数据项与之对应的索引例工创建1个Series对象,存储3名同学的姓名si=pd.Series([“王静怡,“张佳妮:“李臣武”])sl_2=pd.Series([“王静怡二“张佳妮“J李臣武index=[Ms01s02S03])通过索引可以访问Series对象的值,sl[0]的值是“王静怡”通过赋值可以修改Series对象的值,sl_2[s01]=虞颖健通过Series对象上的属性index可以访问所有的索引,如sl.index的值等价于[123]通过Series对象上的属性values可以访问所有的数据项,如sl.values的值等价于「王静怡、”张佳妮」”李臣武例2通过合并Series对象来构建DataFrame对象si=pd.Series(「王静怡“张佳妮李臣武index=[012])s2=pd.Series(厂女(“女“男index=[l20])s3=pd.Series([28^5837]index=[201])df=pd.DataFrame()#创建一个空的DataFrame对象,代码不需要掌握肝[“姓名]=sidf[“性别”]=S2什.借阅次数=S3df的结构例2的程序演示了如何将Series对象组合成DataFrame对象注意!在组合的过程中,Series索引相同的项会处在DataFrame对象的同一行si索引1的“张佳妮”、S2索引1的“女”和S3索引1的“37”都在DataFrame对象的第2行
(2)DataFrame对象DataFrame对象是Series对象的合集
①DataFrame的构建例使用字典构建DataFrame对象data={姓名”[”王静怡:”张佳妮;“李臣武”性别“[“女、”女、“男“借阅次数”:[285837])df=pd.DataFrame(datacolumns[“姓名、“性别:“借阅次数”])df=pd.DataFrame(data)#columns省略,默认使用字典的键作为列名df的结构索引姓名性别借阅次数0王静怡女281张佳妮女582李臣武男37
②DataFrame上的属性使用DataFrame对象的index属性访问索引df・index的值等价于“
[012]”使用DataFrame对象的columns属性访问索引df.columns的值等价于姓名“性别二”借阅次数使用DataFrame对象的values属性访问每一行df.values的值等价于“[[王静怡[女
[28]「张佳妮[女
[58]「李臣武1男37]]”,每一行的数据都相当于是一个列表使用DataFrame对象的T属性可以进行行列转置转置就是第1列变第1行,第2列变第2行……,依此类推,df.T的结构如下姓名王静怡张佳妮李臣武性别女女男借阅次数285837例修改借阅次数列什.借阅次数=
[305268]注意!如果“借阅次数”列存在的情况下修改可以,如果“借阅次数”列不存在,要添加名为“借阅次数”的列,该方式无法正常工作
③DataFrame上的常用函数I.drop函数drop函数删除行axis=0或列axis=ldrop函数不改变原有的DataFrame对象,通过返回一个新的DataFrame对象保存改变后的数据运行得到的结果0阿地力•艾麦提1伊力亚斯•托合荔……数据太多,用省略号省略中间部分数据19吴灿Name:姓名,dtype:object
②访问多列交互窗口运行以下代码df[[”姓名,“英语”,“语文”]]运行得到的结果姓名英语语文0阿地力1401321伊力亚斯11212819吴灿96148注意此处用法是“口”中再次包裹了姓名:英语:”语文“]”!!!⑶单元格的访问与修改通过df.atlindex列名称厂来访问单元格的具体数值比如:df.at[8“姓名的结果是“阿依祖克热•吐尔洪;df.at[8J语文T的结果是“120”o要修改单元格值需要再加一个赋值操作:df.at[8姓名、]=yuyingjian唧可
4.计算⑴列与列之间可进行四则混合运算在pandas中,列与列能够直接进行+、-、*、/等四则混合运算,得到的结果也是列例1交互窗口运行以下代码df『语文”]+df[数学]+df『英语”]运行得到的结果0396132619327dtype:int64要把计算得到的结果放到原来的表格中,可以运行下面的代码:df「总分”]=df「语文”]+df「数学”]+df「英语”]例2交互窗口运行以下代码df「语文”]/150*100运行得到的结果
088.
000000185.
3333331998.666667Name:语文,dtype:float642使用统计函数进行计算在pandas中内置了对表格、行、列进行统计计算的函数,进一步的简化统计分析工作
①describedescribe函数返回表格中数值列列中存储的数据是int、float等数值的基本描述统计值交互窗口运行以下代码df.describef运行得到的结果其中的count是列上有多少|非空数据项的计数mean是列上|所有非空数据项的平均值min是列上所有非空数据项的最小值max是列上|所有非空数据项的最大值describe也可以应用在某一列或者某几列上
②countcount返回表格或者列上非空数据项的数量
③sum对行、列上的俳空数据项进红求和
1.按列进行计算要对表格的每一列进行求和计算,可以将sum函数的参数axis设置为0交互窗口运行以下代码df.sum#省略axis就是axis=0df.sumaxis=O运行得到的结果班级1班1班1班1班1班2班2班2班2班2班3班3班3班3班3班学号5330姓名阿地力伊力亚斯卢静古丽米热阿依古再丽张丞国萨迪克江阿比旦阿…性别男男女女女男男女女女男男男女女男男男男女团员是否是否是否是否是否否是是否是否否是否是语文2470数学2255英语2476总分7201dtype:object注意sum函数并不是只计算数值列,实际上列上数据项是字符串,它会做简单的连接
11.按行进行计算要对表格的每一行进行求和计算,可以将sum函数的参数axis设置为1df.sumaxis=l将每一行的数值项都累加起来,包括学号、语文、数学、英语,所以index为的结果是104+132+124+140=500注意,对每一行进行求和的时候,只对非空的数值项进行求和,字符串的数据项会被忽略df[”语文]sumaxis=l是没有意义的,因为一列的每一行只有一个数据项,总和是其本身将计算的语数外总分存到原表格的“总分”列可以使用如下代码df「总分”]=df[「语文”“数学,”英语用.sumaxis=l
③mean对行、列上的俳空数值项进行求平均I.按列进行计算要对表格的每一列进行求平均计算,可以将mean函数的参数axis设置为0II.按行进行计算要对表格的每一行进行求平均计算,可以将mean函数的参数axis设置为1df.meanaxis=l将每一行的数值项求平均,包括学号、语文、数学、英语,所以index为0的结果是104+132+111+134/4=
125.00注意,对每一行进行求平均的时候,只对非空的数值项进行求平均,字符串的数据项会被忽略df「语文〕meanaxis=l是没有意义的,因为一列的每一行只有一个数据项,平均值是其本身
③max与min对行、列上的|非空数据项求最大值、最不植I.按列进行计算要对表格的每一列进行求最大值、最小值,可以将函数的参数axis设置为0R按行进行计算要对表格的每一行进行求最大值、最小值,可以将函数的参数axis设置为1df.max(axis=l)对每一行的数值项求最大值,包括学号、语文、数学、英语,所以index为19的结果是
436、
148、
83、96的最大值436注意,对每一行进行求最大值、最小值的时候,只对非空的数值项进行求值,字符串的数据项会被忽略.将pandas的表格导出为excel#通过pandas表格上的to_excel函数导出excel文件,其参数是导出的excel文件名#to_excel函数执行的结果把表格df中的内容导出到了“导出.xlsx”文件df.to_excel(导出.xlsx).排序pandas通过sort_values函数完成排序,sort_values的函数签名如下DataFrame对象.sort_values(列名称,ascending=True/False)第1个参数指定要排序的列,第2个参数ascending指定是升序还是降序,ascending为True的时候为升序排序,ascending为False的时候是降序排序,省略第2个参数等同于ascending为True例1将肝对象的数据根据总分降序排序df2=df・sort_values(总分ascending=False)例2将df对象的数据根据总分升序排序df3=df.sort_values(总分,ascending=True)注意sort_values函数并不会改变原有的DataFrame对象,sort_values函数执行完毕得到一个新的排序完成的DataFrame对象,为了保存这个DataFrame对象,要赋值给新的变量.筛选pandas支持对DataFrame对象进行筛选,语法如下DataFrame对象[筛选条件]筛选条件的最小单元是对列的关系运算例工将df对象中的所有女同学筛选出来df4=df[df[“性别]==女]例2将df对象中总分在380分以上的同学筛选出来df5=df[df「总分”]=380]注意筛选得到新的DataFrame对象,需要通过赋值给新变量来保存新DataFrame对象•分组DataFame对象上可以使用groupby函数,可以对DataFrame对象上的行进行分组(对列分组也可以,但是考试不要求),并对每一个分组进行统计计算groupby函数的签名如下grp=DataFrame对象.groupby(列名称,as_index=True/False)第1个参数列名称指定依据哪一列的数据来进行分组,第2个参数as_index控制分组新生成的DataFrame对象的index未指定as_index参数默认为True得到分组对象grp后,可以对分组对象grp上的列进行统计计算例T将df对象中的数据按“班级”分组,并计算分组后各组数据的平均值上面两段代码有个共同点,学号列是数值列,所以也会对学号列进行求平均的操作要修正这点,我们可以指定统计计算的列,代码如下所示在指定统计的列的时候,也可以只指定一列“grpl「语文”].mean”或者grp2r英语”].mean”也能够正确的运行并返回结果例2将df对象中的数据按“团员”分组,并计算分组后各组数据的数量grp3=df.groupby团员”as_index=Truedfr3=grp3[“姓名]・count在上面的代码中,”“姓名””可以更换为任意列的列名,因为count函数只是统计该列非空数据的数量有一点需要注意,在进行统计计算的时候,不管是mean、count还是sum都会忽略空数据!运行下面的代码“姓名]=None;df.at[0“语文”]=None将df中index为0的同学的姓名和语文设置为空数据,再执行例
1、例2的代码,得至ij的结果如图/Pandas编程处理数据HABIC|IDIIEJFG1班级学号姓名性别团员语文数学英语21班104阿地力里是13212414031班107伊力亚斯里否1288611241班115卢静女是1398810351班119古丽米热女否9413911661班140阿依古再丽女是1148611772班204张丞国里不14714314982班205萨迪克江男是12312414992班216阿比旦女否998094102班220阿依祖克热女是120106138112班229程馨春女否127124145123班311也斯哈提里否10089142133班316米浩然里是99133127143班320依力哈木江里是139106109153班326热伊麦女否134108134163班334艾力皮也女是149112135174班404伊合巴力里否100127117184班406田坤里否147137146194班407依力格尔男是106128104204班411马硕宇男否125132103214班436吴灿女是148839601班
104.
6117.6否1012班
123.
2115.
4135.0是923班
124.
2109.
6129.434班
125.
2121.
4113.2DataFrameSeriesSeriesSeriesDataFrame索引姓名性别借阅次数0王静怡女281张佳妮女582李臣武男37S1的结构sl_2的结构0王静怡S01王静怡1张佳妮S02张佳妮2李臣武S03李臣武dtype:objectdtype:object索引姓名性别借阅次数0王静怡男581张佳妮女372李臣武女28dfl=df.drop“性别二axis=l运行后dfl的结构索引姓名借阅次数0王静怡281张佳妮582李臣武37df2=df.drop0df2=df.drop0axis=0运行后df2的结构索引姓名性别借阅次数1张佳妮女582李臣武男37II.append函数III.insert函数以上4个函数书上没演示代码,暂略IV・rename函数V.concat函数df[0:3]#取位置
0、
1、2不包括3运行得到结果班级学号姓名性别01班104阿地力男
11.班107伊力亚斯男21班115卢静
②head、tail函数访问女l.head函数-headx取表格的前x交互窗口运行以下代码df.head5运行得到的结果个班级学号姓名性别01班104阿地力男11班107伊力亚斯男21班115卢静女31班119古丽米热女41班140阿依古再丽女ll.tail函数-tailx取表格的后交互窗口运行以下代码df.tail5运行得到的结果略2列的访问
①访问单列交互窗口运行以下代码df「姓名”]或者df.姓名X个团员语文数学英语是132124140否12886112是13988103团员语文数学英语是132124140否12886112是13988103否94139116是11486117学号语文数学英语count
20.
00000020.
00000020.
00000020.000000mean
266.
500000123.
500000112.
750000123.800000std
114.
58644218.
68999221.
11092318.746508min
104.
00000094.
00000080.
00000094.00000025%
188.
000000104.
50000088.
750000107.75000050%
270.
000000126.
000000118.
000000122.00000075%
351.
500000139.
000000129.
000000140.500000max
436.
000000149.
000000143.
000000149.000000交互窗口运行以下代码df.countf交互窗口运行以下代码df[”班级]count交互窗口运行以下代码df[「班级-学号叩.count运行得到的结果班级20学号20姓名20性别20团员20语文20数学20英语20dtype:int64运行得到的结果20运行得到的结果班级20学号20dtype:int64交互窗口运行以下代码df「语文”].sumdf[语文].sumaxis=0交互窗口运行以下代码df[[语文J数学]].sumdf[「语文丁数学口.sumaxis=0运行得到的结果2470运行得到的结果语文2470数学2225dtype:int64交互窗口运行以下代码df.sumaxis=l#axis=l不能省略交互窗口运行以下代码df[『语文—数学丁英语口.sumaxis=l运行得到的结果050019763dtype:int64运行得到的结果037719327dtype:int64交互窗口运行以下代码df.meandf.meanaxis=0交互窗口运行以下代码df[”语文]meandf[”语文”].meanaxis=0交互窗口运行以下代码df[「语文,”数学口.meandf[[“语文,数学”]].meanaxis=0运行得到的结果学号
266.50运行得到的结果
123.15运行得到的结果语文
123.15语文
123.15数学
112.75英语
123.80dtype:float64数学
112.75dtype:float64交互窗口运行以下代码df.meanaxis=l交互窗口运行以下代码df[「语文,数学,”英语口.meanaxis=l运行得到的结果
0125.00运行得到的结果
0132.
00000019190.75dtype:float
6419109.000000dtype:float64交互窗口运行以下代码df.maxdf.maxaxis=O交互窗口运行以下代码df[”语文.mindf[“语文”].minaxis=0交互窗口运行以下代码df[「语文数学]].maxdf[「语文—数学口.maxaxis=0班级4班学号436姓名马硕宇性别男团员是语文149数学143英语149dtype:object运行得到的结果94运行得到的结果语文149数学143dtype:int64交互窗口运行以下代码df.maxaxis=l交互窗口运行以下代码df『语文,”数学“,”英语口.minaxis=l运行得到的结果0140运行得到的结果012419436dtype:int641983dtype:int64索引班级学号姓名性别团员语文数学英语总分52班204张丞国男否147143149439164班406田坤男否14713714643071回|216回匕旦||女|否||||80||94|273索引班级学号姓名性别团员语文数学英语总分72班216阿比旦女否99809427341班140阿依古再丽女是1148611731751口回|204|张丞国|男||否||147|H|149|439索引班级学号姓名性别团员语文数学英语总分21班115卢静女是1398810333031班119古丽米热女否94139116349女••••••I1914班回吴灿女是1|148||83||961327索引班级学号姓名性别团员语文数学英语总分01班104阿地力男是13212414039652班204张丞国男否147143149439I1614可406田坤1男|1否|1147|HH430代码1grpl=df.groupby班级as_index=Falsedfrl=grpl.mean代码2grp2=df.groupby班级as_index=Truedfr2=grp
2.mean索引班级学号语文数学英语总分索引/班级学号语文数学英语总分01班
117.
0121.
4104.
6117.
6343.61班
117.
0121.
4104.
6117.
6343.612班
214.
8123.
2115.
4135.
0373.62班
214.
8123.
2115.
4135.
0373.623班
321.
4124.
2109.
6129.
4363.23班
321.
4124.
2109.
6129.
4363.234班
412.
8125.
2121.
4113.
2359.84班
412.
8125.
2121.
4113.
2359.8as_index=False索引是自动生成的
0、
1、2……的数字序列分组依据的班级列保留as_index=True分组数据直接转化成了索引,注意!班级列没有了代码
(1)grpl=df.groupby(班级,as_index=False)dfrl=grpl[[”语文,“数学:英语”]].mean()代码
(2)grp2=df.groupby(班级”as_index=True)dfr2=grp2[[“语文“,“数学“,“英语”]].mean()索引班级语文数学英语索引/班级语文数学英语01班
121.
4104.
6117.61班
121.
4104.
6117.612班
123.
2115.
4135.02班
123.
2115.
4135.023班
124.
2109.
6129.43班
124.
2109.
6129.434班
125.
2121.
4113.24班
125.
2121.
4113.2例1代码例2代码索引班级H数学英语索引/团员姓名。