版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
按年级统计各参赛项目男女生人数
问题描述学校开展技能大赛,每个班以一个excel文件的形式上交了他们的报名表,各excel文件以班级名称命名,放到一个文件夹中。各文件的结构相同,第一行是表格名称,第二行是列标题,数据从第三行开始。表5.1.2学校技能大赛报名表姓名性别年级行政班比赛项目日期苏卫东男2019级2019级电商1班(电子商务3+2)(春)表格处理5月26日屠家俊男2019级2019级电商1班(电子商务3+2)(春)表格处理5月26日於鑫男2019级2019级电商1班(电子商务3+2)(春)表格处理5月26日………………………………宗渝华男2019级2019级电商1班(电子商务3+2)(春)图文混排5月25日邹媛媛女2019级2019级电商1班(电子商务3+2)(春)图文混排5月25日现要求分年级统计参加比赛项目的男女生人数。输出结果表5.1.3
各参赛项目男女生人数表
年级
比赛项目女男2019级2019C程序设计25.027.02019VF数据库19.029.0三维动画NaN3.0二维动画制作7.06.0图文混排43.056.0幻灯片制作13.010.0表格处理30.054.02020级2020C程序设计13.031.02020VF数据库14.027.0二维动画制作1.04.0图文混排20.028.0幻灯片制作44.062.0表格处理13.016.02021级二维动画制作57.072.0图像处理70.098.0视频剪辑59.070.0从表格结构来看,此表并非常见的二维表,而是一个多维表,行索引有两级,分别是年级和班级。“性别”是列索引的名称。题前思考表5.1.4问题分析问题描述问题解答怎样将多个excel文件的数据读入到一个数据框?用glob.glob()函数读入多个excel文件形成数据框列表,再用pandas.concat()拼接数据是以什么为依据来分组的?按“年级”、“班级“、”性别“三个键进行分组
怎样把“竖”着的数据“横”起来?pandas.DataFrame.unstack()可以把“竖”着的数据“横”起来importpandasaspdimportglobfiles=glob.glob(r'D:\pydata\项目五\班级表\*.xlsx')①res=[]②forfinfiles:res.append(pd.read_excel(f,skiprows=1).loc[:,['姓名','性别','年级','行政班','比赛项目','日期']])③grade=pd.concat(res)④grade['日期']=grade['日期'].str[:-2]res=grade.groupby(['年级','比赛项目','性别'])['姓名'].agg('count')⑤res=res.unstack(2)⑥print(res)程序代码importpandasaspdimportglobfiles=glob.glob(r'D:\pydata\项目五\班级表\*.xlsx')①res=[]②forfinfiles:res.append(pd.read_excel(f,skiprows=1).loc[:,['姓名','性别','年级','行政班','比赛项目','日期']])③grade=pd.concat(res)④grade['日期']=grade['日期'].str[:-2]res=grade.groupby(['年级','比赛项目','性别'])['姓名'].agg('count')⑤res=res.unstack(2)⑥print(res)程序代码使用Python内置模块glob中的glob函数从指定文件夹中读取扩展名为xlsx的所有文件。程序代码文件名列表读取到变量files中,其值为['D:\\pydata\\项目五\\班级表\\学校技能竞赛报名表(2019级电商10班(美术设计与制作高职)(春)).xlsx','D:\\pydata\\项目五\\班级表\\学校技能竞赛报名表(2019级电商11班(数字影像3+2)(春)).xlsx','D:\\pydata\\项目五\\班级表\\学校技能竞赛报名表(2019级电商1班(电子商务3+2)(春)).xlsx',…]importpandasaspdimportglobfiles=glob.glob(r'D:\pydata\项目五\班级表\*.xlsx')①res=[]②forfinfiles:res.append(pd.read_excel(f,skiprows=1).loc[:,['姓名','性别','年级','行政班','比赛项目','日期']])③grade=pd.concat(res)④grade['日期']=grade['日期'].str[:-2]res=grade.groupby(['年级','比赛项目','性别'])['姓名'].agg('count')⑤res=res.unstack(2)⑥print(res)程序代码定义空列表res用于存储各个班级报名表对应的数据框。importpandasaspdimportglobfiles=glob.glob(r'D:\pydata\项目五\班级表\*.xlsx')①res=[]②forfinfiles:res.append(pd.read_excel(f,skiprows=1).loc[:,['姓名','性别','年级','行政班','比赛项目','日期']])③grade=pd.concat(res)④grade['日期']=grade['日期'].str[:-2]res=grade.groupby(['年级','比赛项目','性别'])['姓名'].agg('count')⑤res=res.unstack(2)⑥print(res)程序代码对列表files中的每一个文件名f,读取到数据框并追加到列表res。程序代码一个班级的报名表数据如表5.1.5所示。表5.1.5单个班级报名表姓名性别年级行政班比赛项目日期经伟男2019级2019级电商10班(美术设计与制作高职)(春)表格处理5月26日周三伯桂海男2019级2019级电商10班(美术设计与制作高职)(春)幻灯片制作5月25日周二樊露男2019级2019级电商10班(美术设计与制作高职)(春)幻灯片制作5月25日周二………………………………汤阿奎男2019级2019级电商10班(美术设计与制作高职)(春)幻灯片制作5月25日周二袁婷女2019级2019级电商10班(美术设计与制作高职)(春)幻灯片制作5月25日周二詹鹏男2019级2019级电商10班(美术设计与制作高职)(春)幻灯片制作5月25日周二importpandasaspdimportglobfiles=glob.glob(r'D:\pydata\项目五\班级表\*.xlsx')①res=[]②forfinfiles:res.append(pd.read_excel(f,skiprows=1).loc[:,['姓名','性别','年级','行政班','比赛项目','日期']])③grade=pd.concat(res)④grade['日期']=grade['日期'].str[:-2]res=grade.groupby(['年级','比赛项目','性别'])['姓名'].agg('count')⑤res=res.unstack(2)⑥print(res)程序代码将列表res中的所有数据框拼接成一个数据框。程序代码姓名性别年级行政班比赛项目日期经伟男2019级2019级电商10班(美术设计与制作高职)(春)表格处理5月26日周三伯桂海男2019级2019级电商10班(美术设计与制作高职)(春)幻灯片制作5月25日周二樊露男2019级2019级电商10班(美术设计与制作高职)(春)幻灯片制作5月25日周二苟颖女2019级2019级电商10班(美术设计与制作高职)(春)幻灯片制作5月25日周二经勇男2019级2019级电商10班(美术设计与制作高职)(春)幻灯片制作5月25日周二..................申玉川男2021级2021级电商7班(计算机高职字影像3+2)(春)图像处理(2021级)5月25日周二孙乐男2021级2021级电商7班(计算机高职字影像3+2)(春)图像处理(2021级)5月25日周二王秀娟女2021级2021级电商7班(计算机高职字影像3+2)(春)图像处理(2021级)5月25日周二幸伯梅女2021级2021级电商7班(计算机高职字影像3+2)(春)图像处理(2021级)5月25日周二钟恒男2021级2021级电商7班(计算机高职字影像3+2)(春)图像处理(2021级)5月25日周二表5.1.6合并之后的报名表importpandasaspdimportglobfiles=glob.glob(r'D:\pydata\项目五\班级表\*.xlsx')①res=[]②forfinfiles:res.append(pd.read_excel(f,skiprows=1).loc[:,['姓名','性别','年级','行政班','比赛项目','日期']])③grade=pd.concat(res)④grade['日期']=grade['日期'].str[:-2]res=grade.groupby(['年级','比赛项目','性别'])['姓名'].agg('count')⑤res=res.unstack(2)⑥print(res)程序代码对数据框按'年级','比赛项目','性别'的顺序依次进行分组。程序代码年级比赛项目性别
2019级2019C程序设计女25男272019VF数据库女19男29………………表格处理女30男542020级2020C程序设计女13男31………………表格处理女13男162021级二维动画制作女57男72图像处理女70男98视频剪辑女59男70表5.1.7分组之后得到的序列(Series)importpandasaspdimportglobfiles=glob.glob(r'D:\pydata\项目五\班级表\*.xlsx')①res=[]②forfinfiles:res.append(pd.read_excel(f,skiprows=1).loc[:,['姓名','性别','年级','行政班','比赛项目','日期']])③grade=pd.concat(res)④grade['日期']=grade['日期'].str[:-2]res=grade.groupby(['年级','比赛项目','性别'])['姓名'].agg('count')⑤res=res.unstack(2)⑥print(res)程序代码将第2级行索引展开到列。任务小结1.使用Python内置模块glob中的glob函数从指定文件夹中读取扩展名为xlsx的所有文件。2.对列表files中的每一个文件名f,读取到数据框并追加到列表res。3.将列表res中的所有数据框拼接成一个数据框。4.对数据框按'年级','比赛项目','性别'的顺序依次进行分组。5.将第2级行索引展开到列。一展身手对技能大赛报名进行统计操作,要求查看各项目男生和女生在每个年级的分布情况,即将年级从行索引展开(或旋转)到列索引。统计结果如下表所示,请分别用unstack()方法和pivot()方法完成指定的操作,并将结果保存为excel文件。
比赛项目
性别2019级2020级2021级2019C程序设计女25NaNNaN男27NaNNaN2019VF数据库女19NaNNaN男29NaNNaN幻灯片制作女1344NaN男1062NaN……表5.1.10展开“年级”到列索引制作团队制作:岑远红重庆市九龙坡职业教育中心查询学生成绩主讲人:岑远红重庆市九龙坡职业教育中心问题描述学校期末考试后,会提供成绩查询服务,但是不同专业同学的考试科目不一样,不能将他们放到一张表集中查询,为了解决这个问题,我们需要对日常的成绩表做一下调整。表5.1.10学生专业课成绩表姓名C语言(70分)数据结构(70分)算法分析(60分)邱俊松675353胡艳675452孔航675254黄莉645553古瑞616050............卿成16513欧金霞10617晏丽7917肖权利8512齐云瑞000表5.1.11加工后的学生专业课成绩表姓名学科
邱俊松C语言(70分)67数据结构(70分)53算法分析(60分)53胡艳C语言(70分)67数据结构(70分)54………肖权利数据结构(70分)5算法分析(60分)12齐云瑞C语言(70分)0数据结构(70分)0算法分析(60分)0输出结果表5.1.12学生成绩查询结果
学科成绩
C语言(70分)67数据结构(70分)54算法分析(60分)52题前思考表5.1.4问题分析问题描述问题解答怎样把“横”着的数据“学科”“竖”起来?收折操作实现把“横”着的数据“学科”“竖”起来。怎样根据索引查询学生成绩?使用数据框的loc属性定位学生成绩实现查询功能。importpandasaspdgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade.set_index('姓名',inplace=True)①='学科'②grade=grade.stack()③grade=grade.to_frame()④grade.columns=['成绩']⑤name=input()ifnameingrade.index:print(grade.loc[name])⑥else:print('学生姓名错误!')程序代码importpandasaspdgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade.set_index('姓名',inplace=True)①='学科'②grade=grade.stack()③grade=grade.to_frame()④grade.columns=['成绩']⑤name=input()ifnameingrade.index:print(grade.loc[name])⑥else:print('学生姓名错误!')程序代码将“姓名”列设置为数据框的索引。程序代码表5.1.14将姓名设置为索引
姓名C语言(70分)
数据结构(70分)
算法分析(60分)
邱俊松675353胡艳675452孔航675254黄莉645553古瑞616050............卿成16513欧金霞10617晏丽7917肖权利8512齐云瑞000importpandasaspdgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade.set_index('姓名',inplace=True)①='学科'②grade=grade.stack()③grade=grade.to_frame()④grade.columns=['成绩']⑤name=input()ifnameingrade.index:print(grade.loc[name])⑥else:print('学生姓名错误!')程序代码将列索引命名为“学科”。程序代码表5.1.15将姓名设置为索引学科姓名C语言(70分)
数据结构(70分)
算法分析(60分)
邱俊松675353胡艳675452孔航675254黄莉645553古瑞616050............卿成16513欧金霞10617晏丽7917肖权利8512齐云瑞000importpandasaspdgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade.set_index('姓名',inplace=True)①='学科'②grade=grade.stack()③grade=grade.to_frame()④grade.columns=['成绩']⑤name=input()ifnameingrade.index:print(grade.loc[name])⑥else:print('学生姓名错误!')程序代码调用数据框对象grade的stack()方法“收折”最后一级列索引“学科”,将使数据框变成一个多级索引的序列。程序代码表5.1.16grade收折之后形成的序列姓名学科
邱俊松C语言(70分)67数据结构(70分)53算法分析(60分)53胡艳C语言(70分)67数据结构(70分)54………肖权利数据结构(70分)5算法分析(60分)12齐云瑞C语言(70分)0数据结构(70分)0算法分析(60分)0数据框的索引为多级索引:MultiIndex([('邱俊松',
'C语言(70分)'),
('邱俊松','数据结构(70分)'),
('邱俊松','算法分析(60分)'),
...
('肖权利','算法分析(60分)'),
('齐云瑞',
'C语言(70分)'),
('齐云瑞','数据结构(70分)'),
('齐云瑞','算法分析(60分)')],
names=['姓名','学科'],length=504)importpandasaspdgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade.set_index('姓名',inplace=True)①='学科'②grade=grade.stack()③grade=grade.to_frame()④grade.columns=['成绩']⑤name=input()ifnameingrade.index:print(grade.loc[name])⑥else:print('学生姓名错误!')程序代码将上一步得到的序列转换为数据框。程序代码表5.1.17序列转换成的数据框
姓名
学科0
邱俊松C语言(70分)67数据结构(70分)53算法分析(60分)53胡艳C语言(70分)67数据结构(70分)54.........肖权利数据结构(70分)5算法分析(60分)12齐云瑞C语言(70分)0数据结构(70分)0算法分析(60分)0importpandasaspdgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade.set_index('姓名',inplace=True)①='学科'②grade=grade.stack()③grade=grade.to_frame()④grade.columns=['成绩']⑤name=input()ifnameingrade.index:print(grade.loc[name])⑥else:print('学生姓名错误!')程序代码将上一步得到的序列转换为数据框。程序代码表5.1.18为列命名为“成绩”后结果
姓名
学科成绩邱俊松C语言(70分)67数据结构(70分)53算法分析(60分)53胡艳C语言(70分)67数据结构(70分)54.........肖权利数据结构(70分)5算法分析(60分)12齐云瑞C语言(70分)0数据结构(70分)0算法分析(60分)0importpandasaspdgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade.set_index('姓名',inplace=True)①='学科'②grade=grade.stack()③grade=grade.to_frame()④grade.columns=['成绩']⑤name=input()ifnameingrade.index:
print(grade.loc[name])⑥else:print('学生姓名错误!')程序代码根据输入的姓名查询成绩。1.通过DataFrame.set_index()方法将“姓名”列设置为数据框的索引。2.通过DataF属性将列索引命名为“学科”。3.调用DataFrame.stack()方法“收折”最后一级列索引“学科”,将使数据框变成一个多级索引的序列。4.调用Series.to_frame()方法将序列转换为数据框。5.访问DataFrame.loc属性根据输入的姓名查询成绩。一展身手现在要求对全校各专业学生分班计算各专业课的平均分。因为各专业的专业课程不同,所以必须要先改变各专业的成绩表的结构,将成绩列收折到行索引,然后合并成一个表,再进行分组统计,按班和学科分组后计算平均分。表5.1.22分班统计各专业课平均成绩
班级
学科成绩2019级计算机1班C语言(70分)46.925000
数据结构(70分)26.000000
算法分析(60分)32.4000002019级计算机2班C语言(70分)54.869565
数据结构(70分)42.413043
算法分析(60分)40.065217………………制作团队制作:岑远红重庆市九龙坡职业教育中心按班级分析成绩结构主讲人:岑远红重庆市九龙坡职业教育中心问题描述教师和学校为了掌握学生的学习情况,需要对学生成绩的结构进行分析,查看各分数段的学生人数占比,这是教学质量分析中常用的操作,最后要得到一个表格,分别展示各学科的优分率、及格率和平均分,用以分析成绩结构。姓名C语言(70分)数据结构(70分)算法分析(60分)邱俊松675353胡艳675452孔航675254黄莉645553古瑞616050............卿成16513欧金霞10617晏丽7917肖权利8512齐云瑞000表5.2.1学生专业课成绩表输出结果
C语言(70分)数据结构(70分)算法分析(60分)
班级优分率及格率平均分优分率及格率平均分优分率及格率平均分2019级计算机1班42%65%470%20%2612%42%322019级计算机2班59%80%552%57%4220%72%402019级计算机3班19%71%447%29%350%40%312019级计算机4班28%72%480%5%282%35%33表5.2.2成绩结构分析表 题前思考问题描述问题解答结果表中是否有分组?是按哪一列来分的组?
需要根据班级对学生分组对哪些列进行了统计分析?
对“C语言(70分)”、“数据结构(70分)”和“算法分析(60分)”三列进行了统计分析采用了哪些方法对数据列进行了汇总操作?
分别采用求百分比和平均值的方法进行汇总表5.2.3 问题分析importpandasaspdimportnumpyasnpgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','班级','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade=pd.pivot_table(grade,①index=['班级’],②values=['C语言(70分)','数据结构(70分)','算法分析(60分)'],③aggfunc={'C语言(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],④'数据结构(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],'算法分析(60分)':[lambdas:s[s>=48].shape[0]/s.shape[0],lambdas:s[s>=36].shape[0]/s.shape[0],np.mean]})grade.rename({'<lambda_0>':'优分率','<lambda_1>':'及格率','mean':'平均分'},axis=1,inplace=True)⑤grade.loc[:,(slice(None),['优分率','及格率'])]=grade.loc[:,(slice(None),['优分率','及格率'])].apply(lambdas:s.map(lambdax:format(x,".0%")),axis=1)⑥grade.loc[:,(slice(None),['平均分'])]=grade.loc[:,(slice(None),['平均分'])].apply(lambdas:s.map(lambdax:f'{x:.1f}'),axis=1)⑦程序代码importpandasaspdimportnumpyasnpgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','班级','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade=pd.pivot_table(grade,①index=['班级’],②values=['C语言(70分)','数据结构(70分)','算法分析(60分)'],③aggfunc={'C语言(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],④'数据结构(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],'算法分析(60分)':[lambdas:s[s>=48].shape[0]/s.shape[0],lambdas:s[s>=36].shape[0]/s.shape[0],np.mean]})grade.rename({'<lambda_0>':'优分率','<lambda_1>':'及格率','mean':'平均分'},axis=1,inplace=True)⑤grade.loc[:,(slice(None),['优分率','及格率'])]=grade.loc[:,(slice(None),['优分率','及格率'])].apply(lambdas:s.map(lambdax:format(x,".0%")),axis=1)⑥grade.loc[:,(slice(None),['平均分'])]=grade.loc[:,(slice(None),['平均分'])].apply(lambdas:s.map(lambdax:f'{x:.1f}'),axis=1)⑦程序代码函数的第一个参数就是制作数据透视表的原始数据。importpandasaspdimportnumpyasnpgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','班级','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade=pd.pivot_table(grade,①index=['班级’],②values=['C语言(70分)','数据结构(70分)','算法分析(60分)'],③aggfunc={'C语言(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],④'数据结构(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],'算法分析(60分)':[lambdas:s[s>=48].shape[0]/s.shape[0],lambdas:s[s>=36].shape[0]/s.shape[0],np.mean]})grade.rename({'<lambda_0>':'优分率','<lambda_1>':'及格率','mean':'平均分'},axis=1,inplace=True)⑤grade.loc[:,(slice(None),['优分率','及格率'])]=grade.loc[:,(slice(None),['优分率','及格率'])].apply(lambdas:s.map(lambdax:format(x,".0%")),axis=1)⑥grade.loc[:,(slice(None),['平均分'])]=grade.loc[:,(slice(None),['平均分'])].apply(lambdas:s.map(lambdax:f'{x:.1f}'),axis=1)⑦程序代码关键字参数index表示行索引,指出统计之前的分组依据。importpandasaspdimportnumpyasnpgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','班级','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade=pd.pivot_table(grade,①index=['班级’],②values=['C语言(70分)','数据结构(70分)','算法分析(60分)'],③aggfunc={'C语言(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],④'数据结构(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],'算法分析(60分)':[lambdas:s[s>=48].shape[0]/s.shape[0],lambdas:s[s>=36].shape[0]/s.shape[0],np.mean]})grade.rename({'<lambda_0>':'优分率','<lambda_1>':'及格率','mean':'平均分'},axis=1,inplace=True)⑤grade.loc[:,(slice(None),['优分率','及格率'])]=grade.loc[:,(slice(None),['优分率','及格率'])].apply(lambdas:s.map(lambdax:format(x,".0%")),axis=1)⑥grade.loc[:,(slice(None),['平均分'])]=grade.loc[:,(slice(None),['平均分'])].apply(lambdas:s.map(lambdax:f'{x:.1f}'),axis=1)⑦程序代码关键字参数values表示要汇总的值。importpandasaspdimportnumpyasnpgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','班级','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade=pd.pivot_table(grade,①index=['班级’],②values=['C语言(70分)','数据结构(70分)','算法分析(60分)'],③aggfunc={'C语言(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],④'数据结构(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],'算法分析(60分)':[lambdas:s[s>=48].shape[0]/s.shape[0],lambdas:s[s>=36].shape[0]/s.shape[0],np.mean]})grade.rename({'<lambda_0>':'优分率','<lambda_1>':'及格率','mean':'平均分'},axis=1,inplace=True)⑤grade.loc[:,(slice(None),['优分率','及格率'])]=grade.loc[:,(slice(None),['优分率','及格率'])].apply(lambdas:s.map(lambdax:format(x,".0%")),axis=1)⑥grade.loc[:,(slice(None),['平均分'])]=grade.loc[:,(slice(None),['平均分'])].apply(lambdas:s.map(lambdax:f'{x:.1f}'),axis=1)⑦程序代码关键字参数aggfunc表示汇总函数,也就是对各列进行的汇总操作。程序代码
C语言(70分)数据结构(70分)算法分析(60分)
班级<lambda_0><lambda_1>mean<lambda_0><lambda_1>mean<lambda_0><lambda_1>mean2019级计算机1班0.4250000.65000046.9250000.0000000.20000026.0000000.1250000.42500032.4000002019级计算机2班0.5869570.80434854.8695650.0217390.56521742.4130430.1956520.71739140.0652172019级计算机3班0.1904760.71428644.1428570.0714290.28571435.4047620.0000000.40476230.8571432019级计算机4班0.2750000.72500047.6250000.0000000.05000027.7000000.0250000.35000033.075000表5.2.4 pivot_table()函数的执行结果importpandasaspdimportnumpyasnpgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','班级','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade=pd.pivot_table(grade,①index=['班级’],②values=['C语言(70分)','数据结构(70分)','算法分析(60分)'],③aggfunc={'C语言(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],④'数据结构(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],'算法分析(60分)':[lambdas:s[s>=48].shape[0]/s.shape[0],lambdas:s[s>=36].shape[0]/s.shape[0],np.mean]})grade.rename({'<lambda_0>':'优分率','<lambda_1>':'及格率','mean':'平均分'},axis=1,inplace=True)⑤grade.loc[:,(slice(None),['优分率','及格率'])]=grade.loc[:,(slice(None),['优分率','及格率'])].apply(lambdas:s.map(lambdax:format(x,".0%")),axis=1)⑥grade.loc[:,(slice(None),['平均分'])]=grade.loc[:,(slice(None),['平均分'])].apply(lambdas:s.map(lambdax:f'{x:.1f}'),axis=1)⑦程序代码将列名改为可读性好的名称。程序代码
C语言(70分)数据结构(70分)算法分析(60分)
班级优分率及格率平均分优分率及格率平均分优分率及格率平均分2019级计算机1班0.4250000.65000046.9250000.0000000.20000026.0000000.1250000.42500032.4000002019级计算机2班0.5869570.80434854.8695650.0217390.56521742.4130430.1956520.71739140.0652172019级计算机3班0.1904760.71428644.1428570.0714290.28571435.4047620.0000000.40476230.8571432019级计算机4班0.2750000.72500047.6250000.0000000.05000027.7000000.0250000.35000033.075000表5.2.5 修改列名之后的数据框importpandasaspdimportnumpyasnpgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','班级','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade=pd.pivot_table(grade,①index=['班级’],②values=['C语言(70分)','数据结构(70分)','算法分析(60分)'],③aggfunc={'C语言(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],④'数据结构(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],'算法分析(60分)':[lambdas:s[s>=48].shape[0]/s.shape[0],lambdas:s[s>=36].shape[0]/s.shape[0],np.mean]})grade.rename({'<lambda_0>':'优分率','<lambda_1>':'及格率','mean':'平均分'},axis=1,inplace=True)⑤grade.loc[:,(slice(None),['优分率','及格率'])]=grade.loc[:,(slice(None),['优分率','及格率'])].apply(lambdas:s.map(lambdax:format(x,".0%")),axis=1)⑥grade.loc[:,(slice(None),['平均分'])]=grade.loc[:,(slice(None),['平均分'])].apply(lambdas:s.map(lambdax:f'{x:.1f}'),axis=1)⑦程序代码将优分率和及格率两列数据改为百分比格式。程序代码
C语言(70分)数据结构(70分)算法分析(60分)
班级优分率及格率平均分优分率及格率平均分优分率及格率平均分2019级计算机1班42%65%46.9250000%20%26.00000012%42%32.4000002019级计算机2班59%80%54.8695652%57%42.41304320%72%40.0652172019级计算机3班19%71%44.1428577%29%35.4047620%40%30.8571432019级计算机4班28%72%47.6250000%5%27.7000002%35%33.075000表5.2.6 设置百分比之后的数据框importpandasaspdimportnumpyasnpgrade=pd.read_excel(r"D:\pydata\项目五\计算机专业成绩.xlsx")grade=grade.loc[:,['姓名','班级','C语言(70分)','数据结构(70分)','算法分析(60分)']]grade=pd.pivot_table(grade,①index=['班级’],②values=['C语言(70分)','数据结构(70分)','算法分析(60分)'],③aggfunc={'C语言(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],④'数据结构(70分)':[lambdas:s[s>=56].shape[0]/s.shape[0],lambdas:s[s>=42].shape[0]/s.shape[0],np.mean],'算法分析(60分)':[lambdas:s[s>=48].shape[0]/s.shape[0],lambdas:s[s>=36].shape[0]/s.shape[0],np.mean]})grade.rename({'<lambda_0>':'优分率','<lambda_1>':'及格率','mean':'平均分'},axis=1,inplace=True)⑤grade.loc[:,(slice(None),['优分率','及格率'])]=grade.loc[:,(slice(None),['优分率','及格率'])].apply(lambdas:s.map(lambdax:format(x,".0%")),axis=1)⑥grade.loc[:,(slice(None),['平均分'])]=grade.loc[:,(slice(None),['平均分'])].apply(lambdas:s.map(lambdax:f'{x:.1f}'),axis=1)⑦程序代码将平均为转换为含有一位小数的字符串。程序代码
C语言(70分)数据结构(70分)算法分析(60分)
班级优分率及格率平均分优分率及格率平均分优分率及格率平均分2019级计算机1班42%65%470%20%2612%42%322019级计算机2班59%80%552%57%4220%72%402019级计算机3班19%71%447%29%350%40%312019级计算机4班28%72%480%5%282%35%33表5.2.8将平均分小数位数设为0之后的结果 1.调用pandas.pivot_table()函数,指定要统计的数据框、行索引(index)、数据列(values)和统计方法(aggfunc)2.将列名改为可读性好的名称。3.将优分率和及格率两列数据改为百分比格式。4.将平均为转换为含有一位小数的字符串。一展身手对表5.2.9中的数据框运用pivot_table()方法、unstack()方法和pivot()方法得到下面的结果,所用的汇总方法为平均。
ABCDEF0oneAfoo-1.6781382.0794262013-01-011oneBfoo0.7553790.7119342013-02-012twoCfoo0.095387-1.0279192013-03-013threeAbar-0.996102-0.5326112013-04-014oneBbar-0.624953-0.8714372013-05-015oneCbar0.079559-0.5289232013-06-016twoAfoo2.2473950.1147332013-07-01…………22twoBbar-1.250227-1.1304572013-11-1523threeCbar0.5031300.0425062013-12-15表5.2.9原始数据框
C
BADA B CALLEA B CALLbarone-0.305791.1215030.1138230.309846-0.99592-0.515220.019743-0.49713three-0.38434
NaN-0.11688-0.25061-0.67199
NaN0.549382-0.06131two
NaN-0.52372
NaN-0.52372NaN
-1.25652
NaN-1.25652fooone-1.5880.1149630.383167-0.363291.2125621.064837-0.417870.619844three
NaN0.67141
NaN0.67141
NaN1.522093
NaN1.522093two1.172201
NaN0.5750840.873642-0.72885
NaN-0.3765-0.55267All
-0.276480.3460390.2387980.102785-0.296050.203799-0.05631-0.04952表5.2.13数据透视表制作团队制作:岑远红重庆市九龙坡职业教育中心统计各地区不同风格的电影数量主讲人:岑远红重庆市九龙坡职业教育中心问题描述根据电影信息统计各地区各类型的电影有多少部表5.2.14电影信息表
电影名称导演编剧编剧人数主演类型制片国家/地区语言0比得兔威尔·古勒威尔·古勒/罗伯·列博/碧翠丝·波特3詹姆斯·柯登/多姆纳尔·格里森/萝丝·拜恩/伊丽莎白·德比茨基/玛格特·罗比/黛西·雷德利/...喜剧/动画/冒险美国
/英国/澳大利亚英语1龙门飞甲徐克徐克/何冀平/朱雅欐3李连杰/周迅/陈坤/李宇春/桂纶镁/范晓萱/樊少皇/杜奕衡/刘家辉/张馨予/盛鉴/薛剑/王双...剧情/动作/武侠/古装中国大陆
/中国香港汉语普通话输出结果表5.2.15电影类型统计表类型冒险剧情动作动画历史古装喜剧...科幻脱口秀运动音乐地区
Austria0100000...0000Czechoslovakia0000001...0000不丹0100000...0000东德0100000...0000中国327151147...0000.......................................香港0100000...0000马其顿0200000...0000马来西亚0610102...0010马耳他1120100...1000黎巴嫩0400000...0000题前思考问题描述问题解答结果表中的行索引来自哪一列?行索引来自于“制片国家/地区”列结果表中的列索引来自哪一列?列索引来自于“类型”列如何将源表中的多个类型或地区分拆成单个类型和地区?使用Series.str.split()方法以”/”为标志分割成类型或地区构成的列表表5.2.3 问题分析importpandasaspdfromitertoolsimportproductimportreblank=pile(r'\s+')①m=pd.read_csv(r"D:\pydata\项目五\movies.csv")m['zone']=m['制片国家/地区'].str.replace(blank,'',regex=True).str.split('/')②m['genrus']=m['类型'].str.replace(blank,'',regex=True).str.split('/')m.dropna(subset=['zone','genrus'],axis=0,inplace=True)③m['res']=m.apply(lambdas:list(product(s['zone'],s['genrus'])),axis=1)④res=pd.DataFrame(sum(m['res'],[]),columns=['地区','类型'])⑤pd.crosstab(index=res['地区'],columns=res['类型'])⑥程序代码importpandasaspdfromitertoolsimportproductimportreblank=pile(r'\s+')①m=pd.read_csv(r"D:\pydata\项目五\movies.csv")m['zone']=m['制片国家/地区'].str.replace(blank,'',regex=True).str.split('/')②m['genrus']=m['类型'].str.replace(blank,'',regex=True).str.split('/')m.dropna(subset=['zone','genrus'],axis=0,inplace=True)③m['res']=m.apply(lambdas:list(product(s['zone'],s['genrus'])),axis=1)④res=pd.DataFrame(sum(m['res'],[]),columns=['地区','类型'])⑤pd.crosstab(index=res['地区'],columns=res['类型'])⑥程序代码定义表示匹配一到多个空字符的正则表达式。importpandasaspdfromitertoolsimportproductimportreblank=pile(r'\s+')①m=pd.read_csv(r"D:\pydata\项目五\movies.csv")m['zone']=m['制片国家/地区'].str.replace(blank,'',regex=True).str.split('/')②m['genrus']=m['类型'].str.replace(blank,'',regex=True).str.split('/')m.dropna(subset=['zone','genrus'],axis=0,inplace=True)③m['res']=m.apply(lambdas:list(product(s['zone'],s['genrus'])),axis=1)④res=pd.DataFrame(sum(m['res'],[]),columns=['地区','类型'])⑤pd.crosstab(index=res['地区'],columns=res['类型'])⑥程序代码用/对地区和类型数据进行分割,作为分割结果的列表成为新列添加到数据框。程序代码'zone'列的值如下:0
[美国,英国,澳大利亚]1
[中国大陆,中国香港]2
[中国大陆]3
[中国大陆]4
[中国大陆]
...
8120
[美国,英国]8121
[中国大陆,美国,中国香港]8122
[美国]8123
[中国大陆,印度]8124
[日本]Name:zone,Length:8125,dtype:object'genrus'列的值如下:0
[喜剧,动画,冒险]1
[剧情,动作,武侠,古装]2
[剧情,悬疑,恐怖]3
[剧情,喜剧,犯罪]4
[喜剧,动作,冒险]
...
8120
[剧情,动画,奇幻]8121
[剧情,喜剧,动作]8122
[爱情,动画,歌舞,家庭,奇幻]8123
[喜剧,动作,冒险]8124
[动画,悬疑]Name:genrus,Length:8125,dtype:objectimportpandasaspdfromitertoolsimportproductimportr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江西吉安市青原区两山人才互联科技有限公司招聘项目制人员3人备考题库及参考答案详解一套
- 2026河南焦作山阳区艺新南社区卫生服务中心招聘1人备考题库及答案详解一套
- 2026苏州大学科研助理岗位招聘13人备考题库及一套答案详解
- 2026辽宁沈阳新具创新科技有限公司招聘5人备考题库及答案详解参考
- 2026浙江衢州市柯城区面向浙江省选聘初中语文教研员1人备考题库及参考答案详解一套
- 2026国药控股贵州有限公司社会招聘备考题库附答案详解
- 2026陕西西北农林科技大学工程训练中心实习指导教师招聘3人备考题库及一套参考答案详解
- 2026湖南张家界市永定区沅古坪镇招聘公益性岗位2人备考题库含答案详解
- 2026广西贺州八步区食品药品安全信息与监控中心招聘2人备考题库完整答案详解
- 2026浙江大学医学院附属第一医院招聘2人备考题库(第二批)及完整答案详解一套
- MOS晶体管基础课件
- 4.2.1主动运输与胞吞胞吐课件-高一上学期生物人教版必修1
- 2024年昆明市初中学业质量诊断性检测 地理试卷及答案
- 城管协管员笔试考题试题(含答案)大全五篇
- 出租房装修改造合同范本
- 2023届四川省乐山市数学五下期末联考试题含解析
- 核动力厂设计安全规定
- 企业技术路线图原理与制定(51.12)
- 第四讲分析实证法学
- YY/T 1182-2020核酸扩增检测用试剂(盒)
- JJG 607-2003声频信号发生器
评论
0/150
提交评论