资源简介 专题9 pandas数据统计学习目标 1.对DataFrame对象按列进行公式计算,描述DataFrame对象数据以字典中键为列的存储形式;2.对每个键对应一列数据多个值进行切片,掌握取出不同数据区域内容的方法;3.运用函数统计对象的平均值等操作,运用排序函数对数据进行有序排列;4.运用groupby函数对数据进行分组的方法,并在分组的基础上进行数据统计.Pandas有Series和DataFrame两种对象,这两种对象均有index和values属性,Series对象的values是一维的,DataFrame的values是二维的,因此DataFrame对象比Series对象多一个columns属性,可以理解为index表示行号,columns表示列名。pandas处理的对象主要是DataFrame,取出DataFrame中的一列,降维为Series对象,可以用list函数转换为列表,对某列的值进行切片,可以转换为一个数值。可以对记录选取、筛选和分组操作,灵活地区分不同类型的数据,可以对记录进行排序操作,实现数据的有序显示。可以对各条记录的字段进行遍历,统计符合要求字段值的数量、总和、平均值以及最值。(2024年1月浙江省选考)某学院举行运动会,比赛设跳高、100米等项目,每个项目分男子组和女子组。现要进行报名数据处理和比赛成绩分析。请回答下列问题: (1)运动会报名规则为:对于每个项目的男子组和女子组,每个专业最多各报5人(如“软件工程”专业在男子跳高项目中最多报5人)。软件工程专业的报名数据保存在DataFrame对象df中,如图a所示。若要编写Python程序检查该专业男子跳高项目报名是否符合规则,下列方法中,正确的是________(单选,填字母)。A.从df中筛选出性别为“男”的数据dfs,再从dfs中筛选出项目为“跳高”的数据,判断筛选出的数据行是否超过5行B.对df中数据按性别排序并保存到dfs中,再从dfs中筛选出项目为“跳高”的数据,判断筛选出的数据行是否超过5行C.从df中筛选出项目为“跳高”的数据dfs,判断dfs中是否有连续5行以上的男生数据(2)运动员比赛成绩的部分数据如图b所示。根据已有名次计算得,第1名至8名分别计9,7,6,5,4,3,2,1分,第8名之后计0分。实现上述功能的部分Python程序如下,请在程序中划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as plt#读取如图b所示数据,保存到 DataFrame 对象 df1 中,代码略f = [9, 7, 6, 5, 4, 3, 2, 1]for i in range(0,len(df1)): rank = df1.at[i,″名次″] #通过行、列标签取单个值 score = 0 if rank <= 8: ______________df1.at[i,″得分″] = score(3)根据上述 df1 中的得分数据,统计各专业总分,绘制如图 c 所示的柱形图,实现该功能的部分Python程序如下:df2 = dfl.groupby(″________″,as_index=False).sum() #分组求和#设置绘图参数,代码略plt.bar(x,y)①请在程序中划线处填入合适的代码。②程序的方框中应填入的正确代码为________(单选,填字母)A.x=df1[″专业″]y=df1[″总分″]B.x=df2[″专业″]y=df2[″得分″]C.df1[″专业″]=″专业″df1[″总分″]=″总分″D.df2[″专业″]=″专业″df2[″得分″]=″得分″重难点1 利用Pandas批量处理文件Pandas主要功能是计算一个集合对象中某个字段的记录数量、总和、平均值和最值(最大值或最小值)。这个集合可以是通过筛选找到符合处理条件的数据(子集),也可以是通过分组,将某列相同字段值的记录组合在一起,形成一个个的分组,再分别统计各个分组的数量、和、平均值和最值。这些功能Excel软件也可以实现,但若是数据分布在多个数据文件时,Excel软件就要手工不断地打开数据,重复进行统计,而Pandas可以通过算法,利用循环结构,将这些操作让计算机自动完成。例题 小红收集了部分城市2021年全年每天PM2.5、PM10、CO浓度数据,每天的数据分别保存在以8位日期字符串命名的CSV文件中,部分文件如图a所示,每个文件记录了一天24小时的监测数据,示例如图b所示。为统计分析城市A全年各月份PM2.5的月平均浓度(当月的日平均浓度的平均值),编写Python程序。请回答下列问题:(1)定义pmday函数,功能为:读取某天的CSV文件,返回城市A当天PM2.5的日平均浓度。函数代码如下,划线处应填入的代码为________(单选,填字母)。A.df['类型']=='PM2.5'B.df['类型'=='PM2.5']C.df[df['类型']]=='PM2.5'D.df[df['类型']=='PM2.5']import pandas as pddef pmday(dayfile): df = pd.read_csv(dayfile) #读取文件dayfile中的数据 df =________ return df['城市A'].mean() #返回城市A当天PM2.5的日平均浓度(2)统计城市A各月份PM2.5的月平均浓度并绘制线形图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as plt def tstr(t):if t<10: retrun '0'+str(t) else: retrun str(t)pm = [0] * 12mdays=[31,28,31,30,31,30,31,31,30,31,30,31] #2021年每月天数for m in range(12): sm = 0 mstr = tstr(m+1) for d in range(①________): dstr = tstr(d+1) dayfile = '2021' + mstr + dstr + '.csv' sd = pmday(dayfile) ②________ pm[m] = sm/mdays[m]x = [1,2,3,4,5,6,7,8,9,10,11,12]y=③________plt.plot(x,y) #绘制线性图#设置绘图参数,显示如图c所示线形图,代码略(3)城市A 2021年PM2.5年平均浓度为34.6微克/立方米。由图c可知,城市A 2021年PM2.5月平均浓度超过年平均浓度的月份共________个。变式 学校食堂以服务质量进行了调查问卷,调查项目共 5 项(具体内容略)。12个班级的调查结果分别存储在“dy01.csv”“dy02.csv”等文件中(如图a所示),每个文件部分界面如图b所示。现需要分析每个问题选“A”的情况,采用Python编制程序代码,请回答下列问题。(1)定义fun_A函数实现统计某个班级5个问题的选“A”的人数,请在划线处填入合适代码。import pandas as pddef fun_A(file): df=pd.read_csv(file) A_list=[] for col in df.columns[1:]: ________________ A_list.append(c) return A_list(2)统计12个班级每个问题选“A”的总人数,请在划线处填入合适代码。ans_list=[]s=″010203040506070809101112″for i in range(0,len(s)-1,2): filename=″dy″+ ①__________+″.csv″ res= fun_A(filename) ans_list.append(res)x=[″问题1″,″问题2″,″问题3″,″问题4″,″问题5″]y=[0,0,0,0,0]for i in range(5): s=0 for j in range(12):②__________ y[i]=s(3)根据上述统计的得分数据,统计每个问题选“A”的数量,绘制如图 c 所示的柱形图,请在划线处填入合适代码。图cimport matplotlib.pyplot as pltplt.title(″每个问题选A的总人数″)plt.bar(①__________,②__________,label='A 选项')plt.legend()plt.show()重难点2 利用函数按列进行数据统计DataFrame是Pandas处理的主要对象,index属性记录了每行记录所在的行索引,columns属性记录每列的名称。df.列名就可以表示该列所有的数据的集合,可以运用函数计算一个集合对象的记录数量、总和、平均值和最值(最大值或最小值)。通过筛选找到符合处理条件的数据(子集)集合,再对集合进行求和等计算。通过分组,将某列相同字段值的记录组合在一起,形成一个个的分组,再分别统计各个分组的数量、和、平均值和最值。例题 小明通过调查问卷收集了食堂满意度情况数据,保存在“data.csv”文件,如图a所示。图a图b为统计分析每个调查项目不同选项的人数及不满意率,编写Python程序。请回答下列问题:(1)统计每一项调查内容的总票数、满意、一般及不满意人数,程序运行结果如图b所示,import pandas as pdimport matplotlib.pyplot as plt #导入模块df=pd.read_csv(″data.csv″,encoding=″utf-8″)#读取csv文件中的数据cols=df.columns[1:]poll=len(df)data= {″调查项目″:[],″总票数″:[],″满意″:[],″一般″:[],″不满意″:[]}for colname in cols: dfc=df.groupby(①__________,as_index=False)[″序号″].count() data[″调查项目″].append(colname) data[″总票数″].append(poll) for j in dfc.index: name=dfc.at[j,colname] data[name].append(②__________)df2=pd.DataFrame(data) ; print(df2)(2)计算每个项目的“不满意率”(=“不满意”/“总票数”*100),并使用柱形图分析每个项目的“不满意率”情况,如图c所示,请在划线处填入合适的代码。图cdf2[″不满意率(%)″]=①__________x=②__________y=df2[″不满意率(%)″]plt.figure(figsize=(8,4))pl.title(″食堂调查问卷不满意率(%)情况″)plt.bar(x,y,label=″不满意率(%)″)plt.legend()变式 某学校开设选修课并在期末让学生对其进行满意度调查,选修课分艺术、体育、语言、计算机、职业技能等领域。现要进行报名数据处理和满意度分析, 请回答下列问题:图a图b(1)选修课开设的条件为:报名人数大于20人。其中计算机类选修课的报名数据保存在DataFrame对象df中,如图a所示。若要编写Python程序检查其中第1学期的“数字视音频处理”选修课是否符合开设条件,下列方法中,不正确的是________(单选,填字母)。A.对df中数据按开设学期排序并保存到dfs中,再从dfs筛选出选修课名称为“数字视音频处理”的数据,判断筛选出的数据行是否超过20行B.从df中筛选出选修课名称为“数字视音频处理”的数据dfs,再对dfs按开设学期进行升序排序,判断数据前21行的开设学期是否是第1学期C.从df中筛选出选修课名称为“数字视音频处理”的数据dfs,再按开设学期分组统计个数,判断第1学期的个数是否超过20(2)计算机类选修课学生的满意度调查部分数据如图b所示。满意度分3个等级:A.满意、B.一般、C.不满意,分别计1分、0分、-1分,基础分为100分。实现计算各选修课的满意度功能的部分Python程序如下,请在划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as plt#读取如图b所示数据,保存到DataFrame对象df1中,代码略score=[1,0,-1]for i in range(0,len(df1)): rank=df1.at[i,″满意度″] ①________ df1.at[i,″得分″]=marka=df1.groupby(″选修课名称″,as_index=False)[″得分″].②________for i in range(0,len(a)): a.at[i,″得分″]+=100(3)根据满意度进行降序排序,绘制如图c所示的柱形图,实现该功能的部分Python程序如下:图ca=a.sort_values(″①__________″,ascending=False)#设置绘图参数,代码略x=②________y=a[″得分″]plt.bar(x,y) #绘制柱形图重难点1 利用Pandas批量处理文件1.高一年级(9个班级)进行“七选三”预选科。每个班一个Excel文件(如图a所示)存储预选科数据。数据表中“1”代表学生选择该科目,空白代表学生未选择该科目(某班部分选科数据如图b所示)。请回答下列问题。图a图b(1)定义如下函数check(dfs)检查选考科目数是否有误,其中参数dfs为DataFrame对象,由如图b所示Excel数据导入。返回值erlst为列表,列表元素数据类型为整型,表示错误数据行对应的学生序号(例如第6行学生“戴*跃”的序号为5)。def check(dfs): erlst = [] for i in range(len(dfs)):xk_sum = 0 for j in dfs.columns[2:]: dyg = ①________ if dyg == 1: xk_sum += dyg if xk_sum != 3: erlst.append(②________)return erlst①在程序中划线处填入的正确代码为________(单选,填字母)。A.dfs.at['i','j'] B.dfs.at['j','i']C.dfs.at[i,j] D.dfs.at[j,i]②在程序中划线处填入合适的代码。(2)读取每个班级的Excel选科数据,若检查无误,则统计每个班级同时选报“物理”和“化学”学科的人数,存储在字典ans中。实现该功能的Python程序如下:import pandas as pdans = {}for i in range(1,10): filename = str(i)+'. xlsx' df =pd.read_excel(filename) errlist = check(df) if errlist != []: print(″请检查文件″, filename,″中序号为″, errlist,″的学生″) else: ①__________ #筛选同时选择物理和化学的数据记录存储在 df1中 ans[str(i)+'班'] = [②________] #形如{“1班”:[41]}①在程序划线处应填入的正确代码段为________(多选,填字母)。(注:全部选对的得 2 分,选对但不全的得1分,不选或有选错的得 0 分)A.df1 = df[df['物理']==1]df1 = df1[df1['化学']==1]B.df1 = df[df['物理']==1]df1 = df[df['化学']==1]C.df1 = df[df['化学']==1]df1 = dfl[df1['物理']==1]D.df1 = df[df['化学']==1]df1 = df[df['物理']==1]②在程序划线处填入合适的代码。(3)用字典ans创建并转置的DataFrame对象如图c所示,绘制柱形图如图d所示。实现该功能的Python程序如下:import matplotlib.pyplot as pltadf = pd.DataFrame(ans,index= ['人数']).Tplt.bar(______)#设置绘图参数,代码略plt.show()程序的划线处应填入的正确代码为________(单选,填字母)。A.adf.人数,adf.班级B.adf.班级,adf.人数C.adf.人数,adf.indexD.adf.index,adf.人数2.学校暑期开展“青春迎亚运”活动,邀请高二学生每日参加运动锻炼并进行线上打卡。每周收集一次相关数据,分别保存在相应的xlsx文件中,部分文件如图a所示;每个文件记录了一周7天的打卡数据,示例如图b所示,其中运动时长单位:分钟。图a图b为统计分析学生锻炼情况,给出周报数据,编写Python程序,请回答以下问题:(1)定义px函数,功能为:读取某一周的打卡数据,将其按班级进行排序操作并返回结果。函数代码如下,将划线处代码补充完整。import pandas as pddef px(file_week): df=pd.read_excel(file_week) df=df.sort_values(________,ignore_index=True) #按班级升序排序,参数ignore_index=True 表示更新索引 return df(2)统计某一周各运动项目的参与人次,并绘制柱形图,部分Python代码如下:import matplotlib. pyplot as plts=input(″请输入文件名:″)df=px(s)df1=df.groupby(″运动项目″,as_index=False).①________ #统计各运动项目参与人次df1.rename(columns={″学号″:″参与人次″},inplace=True) #更改列标题plt.bar(②________)plt.xlabel(″运动项目″)plt.ylabel(″参与人次″)plt.show()划线处应填入的代码为________(单选,填字母)。A.①count() ②df1[″参与人次″],df1[″运动项目″]B.①sum() ②df1[″参与人次″],df1[″运动项目″]C.①sum() ②df1.运动项目,df1.参与人次D.①count() ②df1.运动项目,df1.参与人次(3)统计某一周每班各学生的总运动时长后,比较得出该周每班最高的前两位时长,部分Python程序代码如下,请在划线处填入合适的代码。qp=[[0 for i in range(m)]for j in range(n)]'''定义数组qp记录每班各学生一周运动总时长,n为班级数,m为每班人数。其中qp[0][0]~qp[0][m-1]存储1班1号~m号同学的每周运动总时长,以此类推,qp[n-1][0]~qp[n-1][m-1]存储n班1号~m号同学的每周运动总时长。'''print(″本周每班最高的前两位时长分别为:″)i=0while i num=df[″学号″][i] cla=df[″班级″][i] ①________ if i!=0 and df[″班级″][i]!=df[″班级″][i-1] or②________: cla=df[″班级″][i-1] k1=0;k2=0 for j in range(1,len(qp[cla-1])): if qp[cla-1][j]>qp[cla-1][k1]: ③________ k1=j elif qp[cla-1][j]>qp[cla-1][k2]: k2=j print(cla,″班″,qp[cla -1][k1],qp[cla -1][k2]) i=i+1(4)统计某一周各运动项目的参与人次后绘制柱形图如图c所示,由图可知,该周参与人气最高的运动项目为______________。图c3.为统计分析不同年级学生名字中的常用字,小王同学收集了本校所有学生的名字,并以入学年份为文件名分别保存在Excel文件中,文件如图a所示,每个文件包含了学生的年级、姓名和性别信息,如图b所示。编写Python程序。请回答下列问题:(1)定义getname函数,功能为:读取某年级的Excel文件,找出文件中同性别的学生,将学生姓名中的每个字(不包含姓氏,没有复姓学生)提取出来存储在列表mz中并返回列表。函数代码如下,请在划线处填写合适的代码。def getname(nj, xb): mz=[] df=pd.read_excel(nj+″学生名单.xlsx″) for i in df.index: xm=df.at[i,″姓名″] if ①________: for m in xm[1:]: mz.append(m) return ②________(2)小王想统计女生名字中出现最频繁的10个字,部分Python程序如下,请在划线处选择合适的代码。import pandas as pdxb=input(″请输入性别:″) #输入性别″女″nianji=[″2020级″,″2021级″,″2022级″]mzs=[] #存储姓名中的字for nj in nianji: mzs=mzs+getname(nj,xb)data={'字':mzs,'个数':[1]*len(mzs)}df1=pd.DataFrame(data)df2=df1.groupby(″字″,as_index=False).count() #统计每个字出现的次数df3=__________划线处应选择的代码是________(单选,填字母)。A.df2.sort_values(″个数″,ascending=True)[:10]B.df2.sort_values(″字″,ascending=False).tail(10)C.df2.sort_values(″字″,ascending=True).tail(10)D.df2.sort_values(″个数″,ascending=False).head(10)(3)将统计结果(10个最频繁的字)绘制成柱形图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltplt.title(xb +″生取名常用字″)plt.bar(df3.字,__________)plt.show()4.小明利用“在线社团报名系统”收集了全校学生的社团报名信息,并将报名数据导出到“社团报名.xlsx”中,如图a所示。然后编写Python程序对报名数据进行处理,生成分别以班级名和社团名为文件名的Excel文件,以便分发给相应的社团指导老师和班主任。图a图b(1)在对表格进行数据整理时发现,关于“Jacky.Y”同学的记录可能存在的数据问题是________(选填:A.数据缺失 B.数据异常 C.逻辑错误 D.数据格式不一致)。(2)其中生成每个社团名单文件的过程是:先对报名数据按社团名称进行分类,并对选报同一社团的学生按班级进行升序排序,然后生成各个社团名单文件,如图b所示。对应的程序代码如下,请在划线处填写合适的代码。import pandas as pddef read_file(filename): #读入报名数据的原始文件,并将表中的数据转换成列表,代码略def save_file(a): #保存名单到相应社团的Excel电子表格文件 df = pd.DataFrame(a,columns=[″班级″,″姓名″,″选报社团″]) df.to_excel(①________+″.xlsx″,index=False)a = read_file(″社团报名.xlsx″)n = len(a)#按社团名(参照拼音的字母顺序)进行升序排序,代码略#统计各社团人数,存在列表rs中,rs=[[“滑板社”,36],…],代码略a=[];imin=0;k=0s = 0for i in range(len(rs)): ②________ left,right = s, s+num-1 while left < right: imin = imax = left for k in range(left+1,right+1): if a[k][0] imin=k elif a[k][0]>a[imax][0]: imax = k if imin != left: a[imin],a[left] = a[left],a[imin] if imax == left: ③________ if imax != right: a[imax],a[right] = a[right],a[imax] left = left + 1; right = right-1 ④________ s += num重难点2 利用函数按列进行数据统计1.某单位根据全省各县市区的公共设施与服务运行情况,编制了“公共服务惠民指数”与“公共设施匹配指数”,现要对该两项指数进行分析。请回答下列问题:图a图b(1)该单位希望在所有县市区中,筛选出“公共服务惠民指数”低于75分的县市区,提出预警。各县市区的指数数据保存在DataFrame对象df中,如图a所示。实现上述功能的部分Python程序如下:df1 = df[df[″公共服务惠民指数″] < 75]print(″需要被预警的县市区个数为″,________,″个″)下列语句中,符合要求的为________。(单选,填字母)A.df1.count()B.len(df1)C.df1[″公共服务惠民指数″].sum()(2)根据图a中数据中的区域代码列的前4位,可以获取到该区域所属的地区,例如“3301”即代表“杭州市”。现需要根据该数据,匹配出各县市区所属的地区。实现上述功能的部分Python程序如下,请在程序中划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as pltarea = {″3301″:″杭州市″,″3302″:″宁波市″,......,″3311″:″丽水市″}df = pd.read_excel(″基层智治指数.xlsx″)df.insert(4,″地区″,″″) #在第4列插入“地区”列,值为空for i in df.index: areacode = str(df.at[i,″区域代码″]) df.at[i,″地区″]=________________df = df.drop(″区域代码″ ,axis= 1)(3)根据上述df中的地区信息,统计各地区“公共服务惠民指数”与“公共设施匹配指数”的平均值,并根据“公共服务惠民指数”数据绘制如图b所示的柱形图,实现该功能的部分Python程序如下:dfg = df.groupby(″地区″).________________dfs = dfg.sort_values( )#设置绘图参数,代码略plt.title(″公共服务惠民指数″)plt.bar(dfs.index,dfs[″公共服务惠民指数″])#绘制柱形图①请在程序中划线处填入合适的代码。②程序中的方框中应填入的正确代码为________(单选,填字母)。A.″公共服务惠民指数″, ascending = TrueB.″公共服务惠民指数″, ascending = FalseC.dfg[″公共服务惠民指数″], ascending = TrueD.dfg[″公共服务惠民指数″], ascending = False2.某校高一学生的社团报名数据存储在“stbm.xlsx”文件中,如图a 所示。{'书画社':52,'动漫社':97,'摄影社':35,'汉学社':38,'法学社':51,'诗词社':37,'辩论社':43,'音乐社':63,'飞羽社':56,'魔方社':29}图c(1)统计各社团报名人数,找出报名人数最多的三个社团(不存在并列名次情况)并创建如图b所示的图表。实现上述功能的 Python 程序如下,请在划线处填入合适代码。import pandas as pdimport matplotlib.pyplot as plt#设置中文字体,代码略df=pd.read_excel(″stbm.xlsx″)df1=df.groupby(″①__________″,as_index=False).count()#删除df1的“班级”列,并将列标题“姓名”重命名为“人数”,保存修改结果,代码略df2=df1.sort_values(″人数″,ascending=False)df3=df2.②________plt.bar(df3.社团,③________)plt.title(″报名人数最多的前三个社团″)plt.show()#将各社团报名人数存入字典stdic并输出,结果如图c所示,代码略(2)受场地限制,每个社团开展活动人数上限为45人。解决方案:超过45人的社团分成若干班级,每班人数按一定规则分配。编程解决社团分班问题,并输出如图d所示分班方案,请在划线处填入合适代码。{'书画社':[26,26],'动漫社':[32,32,33], '摄影社':35,'汉学社':38,'法学社':[25,26], '诗词社':37,'辩论社':43,'音乐社':[31,32], '飞羽社':[28,28],'魔方社':29}图dfor i in stdic: if stdic[i]>45: n=(stdic[i]-1)∥45+1 num=[]; x=stdic[i]∥n for j in range(n): if j==n-1: num.append(________) else: num.append(x) #将x添加到列表num末尾 stdic[i]=numprint(stdic)(3)若“动漫社”实际报名人数为98人,则利用上述程序段进行分班后得到的结果为__________________________________________________________________(单选,填字母:A.'动漫社':[32,33,33]/B.'动漫社':[32,32,34])。3.小温对 5 个景区进行网络问卷调查,问卷中“环境”“硬件”“服务”和“交通”设置的选项及分值均一致,部分界面如图a所示。导出数据的部分界面如图b所示,其中数字对应问卷中每题的选项,如数字 i 代表该题的第 i个选项。请回答下列问题。(1)若要统计每份问卷对应景区的评分, 部分代码如下:#导入相关模块,读取如图b所示的数据,保存到DataFrame对象df中,代码略qz=[2.5,2,1.5,1,0.5] ________则划线处的代码为________(单选,填字母)A.df[″评分″] = qz[df[″环境″]] + qz[df[″硬件″]] + qz[df[″服务″]] + qz[df[″交通″]]B.df[″评分″] = df[[″环境″,″硬件″,″服务″,″交通″]].sum (axis=1)C.df[″评分″] = 0for i in df.index: a= df.at[i,″环境″]; b= df.at[i,″硬件″] c= df.at[i,″服务″]; d= df.at[i,″交通″] df.at[i,″评分″] = qz[a-1]+qz[b-1]+qz[c-1]+qz[d-1](2)找出18~39 岁年龄段游客评分均值最高的景区,请在划线处填入合适的代码。jq=[″雁荡山″,″楠溪江″,″渔寮″,″南麂列岛″,″氡泉″]df1 = df[①________]df2 = df1.groupby(″景区″, as_ index=False)[″评分″].mean()df2 = df2.sort_values(″②________″, ascending=False)print(jq[df2[″景区″][0]-1])(3)根据上述 df2 中的评分数据, 绘制如图 c 所示的垂直柱形图, 代码如下:#导入相关模块, 代码略jq1 = []ave = df2[″评分″].mean()df2[″均差″] = df2[″评分″] - avefor i in df2.index: jq1.append (jq[df2.at[i,″景区″] - 1])plt.bar(x, y)plt.show()程序加框处的应填入的正确代码为________(单选, 填字母)。A.x=jqy=df2[″评分″]B.x=df2[″景区″]y=df2[″均差″]C.x=jq1y=df2[″均差″]4.张三同学收集了一个地区 8 月各类共享单车的骑行数据记录,每天的用户数据存储于“shared_bikes.xlsx”文件中,不考虑跨天数据。数据格式如图a所示,请回答下列问题:(1)cal 函数功能为:读取骑行时间的小时和分钟部分,转换为分钟格式并返回,如“2022/8/20 6:57”获取“6:57”转换为417(6*60+57=417),代码如下。请在划线处填入合适的代码。def cal(s): n = len(s) for i in range(n): if s[i] ==″″: #如果为空格字符 p = i if s[i] ==″:″: q = i t =________ + int(s[q+1:]) return t(2)统计本月各类型单车的每天平均骑行时长,并绘制柱形图,代码如下,绘制的图表如图b所示,请在划线处填入合适的代码。图bimport pandas as pdimport matplotlib.pyplot as pltdf = pd.read_excel(″shared_bikes.xlsx″)bike = [″哈罗单车″,″摩拜单车″,″美团单车″,″青桔单车″]sm = [0] * 4avg = [0] * 4days = 31for i in ①________: t = cal(df.at[i,″结束时间″]) - cal(df.at[i,″开始时间″]) for j in range(len(bike)): if df.at[i,″APP类型″] == bike[j]: ②________ breakfor i in range(len(bike)): avg[i] = sm[i] / daysplt.figure(figsize = (12,4))x = bikey =③________plt.bar(x,y)plt.show()(3)统计本月各类型单车的骑行次数,下列加框处代码有错,可以改正为________(选填字母:(A.max()/B.min()/C.mean()/D.count())n = df.groupby(″APP 类型″, as_index = True).用户编号.重难点1 利用Pandas批量处理文件1.管理员从该停车系统中导出了 3 月份每天的停车记录,如图a 所示,每天的停车记录内容格式如图b 所示(进出标记为 0 表示驶入,1 表示驶出,停车记录已按进出时间升序排列)。图a车牌 进出时间 进出标记川B·8CC88 2023-3-23-06:09:56 0川A·A98A8 2023-3-23-06:28:04 0川C·9VV99 2023-3-23-06:56:45 0川B·8UU88 2023-3-23-07:01:29 0川C·9VV99 2023-3-23-07:48:01 1图b为统计停车场3月份每天的收入(只有驶入或驶出记录的车辆不参与计费),编写Python程序。(1)定义readdata函数,功能为:读取某一车牌车辆当天的进出时间记录,返回该车辆当天的停车总费用。参数 data 为该车牌当天的进出时间记录。函数代码如下,请回答下列问题:①程序段中加框处应填入的代码为________(单选,填字母)。A.data.进出标记[p]==0B.data.进出标记[p-1]==0 and data.进出标记[p]==1C.data.进出标记[p+1]==1D.data.进出标记[p]==0 and data.进出标记[p+1]==1②请在程序段划线处填入合适的代码。def catime(t1,t2): #计算时间t1 与时间 t2 之间的时间差并计算本次停车的费用,函数返回停车费用,代码略。def readdata(data): m=len(data) p=0;cost=0;total=0 while p if : cost=catime(data.进出时间[p],data.进出时间[p+1]) total+=cost p+=1 ②________ return total(2)统计停车场 3 月份每天的收入并绘制柱形图,部分Python代码如下,请在划线处填入合适的代码。n=31;dic={}for i in range(1,n+1): ①________ fname=″3 月″+str(i)+″日.xlsx″ df=pd.read_excel(fname) df_g=df.groupby(″车牌″).进出标记.count() for k in df_g.index: #只有一条驶入或驶出记录的车辆不参与计费 if ②________: data=df[df.车牌==k] dic[i]+=readdata(data)plt.title(″某停车场3月份整体收入图″)plt.bar(dic.keys(),dic.values())plt.show()(3)已知每月分为3个时间段,1-10日称为上旬,11-20日称为中旬,21-30(31)日称为下旬。则由图c可知,该停车场3月份________(选填:上旬/中旬/下旬)收入总和最高。2.小明为了研究某地近十年每月的温差变化,编写Python程序。以2023年4月为例,该月每天的温度数据分别保存在以8位日期字符串命名的excel文件中,部分文件如图a所示,每个文件记录了一天24小时的温度数据,如图b记录了4月28日的数据。图a图b(1)定义dv函数,功能为:读取某天的excel文件,返回当天最高温度与最低温度的差值。函数代码如下,划线处应填入的代码为________(单选,填字母)。A.df[″温度″].head(1)-df[″温度″].tail(1)B.df[″温度″].(max()-min())C.df[″温度″].max()-df[″温度″].min()D.df[″温度″].(head(1)-tail(1))def dv(dayfile): df=pd.read_excel(dayfile) diff=____________ return diff(2)定义find函数,功能为:用字典创建DataFrame对象,并筛选出4月份温差大于13的日期,输出结果如图c所示,请在划线处填入代码。日期 温差3 0404 13.19 0410 13.115 0416 13.317 0418 13.827 0428 15.5图cdef find(r,t): dic={″日期″:r,″温差″:t} df1=pd.DataFrame(dic) df2=______________ return df2(3)绘制4月份每天的温差柱形图,部分Python程序如下,请在划线处填写合适的代码。def tstr(t): if t<10: return '0'+str(t) else: return str(t)td=[];date=[]for i in range(30): dstr=tstr( ①________ ) dayfile='202304'+dstr+'.xlsx' date.append(dayfile[4:8]) td.append(②________)#设置绘图参数,代码略plt.bar(date,③________ )plt.show()print(find(date,td))3.小美收集了某电商平台某年1-12月的“十大”空调品牌的销售数据,每个月的数据保存在一个csv文件中,文件如图b所示,分别记录了对应月份的订单数据。请回答下列问题:(1)定义get_sales函数,功能为:读取某月的csv文件,返回某品牌当月的销售额。函数代码如下,划线处应填入的代码为:________(单选,填字母)。A.df[df['品牌'] == brand] B.df[df['品牌'] == month]C.df['品牌'] == brand D.df['品牌'] == monthimport pandas as pddef get_sales(brand, month): filename = str(month) + '.csv' df = pd.read_csv(filename) #读取文件 df =________ sales = (df['数量'] * df['单价']).sum() #求出df中所有数量*单价的总和return sales(2)统计十大品牌全年销售额,并找出销售额最大的品牌,绘制该品牌的1-12月销售额的线形图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltbrand_dict={'格力':0,'美的':0,'海尔':0,'奥克斯':0,'海信':0,'三菱重工':0,'日立':0,'华菱':0,'TCL':0,'大金':0}x,y = [],[]max_sales,brandmax =0,''for i in range(1,13): for j in brand_dict: brand_dict[j] += ①__________for i in brand_dict: if brand_dict[i] > max_sales: max_sales = brand_dict[i] ②________for i in range(1,13): x.append( ③________ ) y.append(get_sales(brandmax,i))plt.plot(x,y)plt.show() #生成线形图如图c所示图c(3)由图c可知,该空调销售额增量最大的月份是________。4. 一球迷收集了近3个赛季的CBA比赛数据,每个赛季的数据分别保存在独立文件中,如图a所示,文件中数据记录格式如图b所示,以球员“布莱克尼”的“二分”数据“7.9-16.3”为例,7.9表示二分球平均命中数量,16.3表示二分球平均投篮次数。图c该球迷想根据历史赛季数据预测各球队下个赛季的首发阵容,编写了如下Python程序,请回答下列问题:(1)定义readData函数,功能为:读取某赛季的excel文件,返回每个队员的得分(得分=二分球命中数量*2+三分球命中数量*3+罚球命中数量。函数代码如下,划线处应填入的代码为________(单选,填字母)。A.df[″得分″][i]+=n*cols[col]B.df[″得分″][i]=n*cols[co1]C.df[″得分″]+=n*cols[col]D.df[″得分″]=df.二分*2+df.三分*3+df.罚球import pandas as pddef readData(file): df=pd.read_excel(file) #读取文件file 中的数据 cols={″二分″:2,″三分″:3,″罚球″:1} for i in range(len(df)): #计算每个队员的得分 for col in cols: p=df[col][i].find(″-″) #在字符串中找到“-”的位置 n=float(df[col][i][:p]) ________________ return df(2)定义select函数,功能为:筛选各球队得分最高的5名球员作为首发阵容,并把球员名字及得分存入列表members后返回。其中n号球队各球员名字存入members[2*n]中,得分存入members[2*n+1]中,请在划线处填写合适的代码。def select(teams) : #teams是字典变量,如:{″浙江″:0,″上海″:1},字典的值代表球队编号 seasons=[″20-21″,″21-22″,″22-23″] members=[0]*len(teams)*2 df=readData(seasons[0]+″.x1sx″) for season in ①________: file=season+″.xlsx″ df1=readData(file) df=pd.concat([df, df1]) #合并两个DataFrame对象数据 for team in teams: df1=②________ df1=df1.groupby(″球员″ , as_index=False).mean() #计算各球员平均得分 df1=df1.sort_values(″得分″,ascending=False).head(5) #按得分降序排序并选取前5名 ③________ members[2*n]=df1[″球员″].values members[2*n+1]=df1[″得分″].values return members(3)定义showChart函数,功能为:查询某球队的首发阵容,绘制柱形图,图表如图c所示,程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltdef showChart(tean, menbers) : n=teams[team] plt.bar(________ ,________) plt.title(team+″队首发阵容″) plt.show()主程序代码如下。teams={″浙江″:0,″上海″:1,″山东″:2,″广东″:3,″北京″:4}members=select (teams)while True: team=input(″输入球队:″) if team==″″ : break showChart(team, members)5.李老师收集了 2022 级学生“七选三” 选课意愿数据,每个班的数据分别保存以'xk'+班级为命名的 xlsx 文件中,如图a所示,每个文件记录了该班每位学生的选考科目选课情况,如图b所示。为统计分析全年级“七选三”选课意愿数据,编写 Python 程序,请回答下列问题:(1)读取各班 xlsx 文件,并合并到一个 DataFrame 对象。程序代码如下,请在划线处填入合适的代码。def data(i): i=i+1 if ①________: t='0'+str(i) else: t=str(i) df_t=pd.read_excel('xk'+t+'.xlsx') return df_tn=12df=pd.DataFrame()for i in range(n): df=df.append(②________,ignore_index=True) #在df末尾追加一个DataFrame(2)统计“技术”选课人数占总人数的比例,并作出各个科目选课人数的柱形图。程序代码如下,请在划线处填入合适的代码。图ckm={'物理':0,'化学':0,'生物':0,'政治':0,'历史':0,'地理':0,'技术':0}for i in range(len(df)): xk=df['选课'][i].split(',') #将'选课'字符串以逗号分隔出来 for j in xk: ①________print('选考技术占比: '+str(round(②________*100,2))+'%')df_km=pd.DataFrame({'科目':km.keys(),'人数':km.values()}) #转换为 DataFrameplt.title('选考各科目人数对比图')plt.bar(③________,df_km['人数'],label='各科目人数')plt.legend()plt.show()(3)分析图c可知,选课人数最多的三门科目是________________。6.某同学收集了部分城市2022年4月每天24小时空气质量数据,按日分别保存在csv文件中,部分文件如图a所示。数据格式如图b所示。请回答下列问题:图a图b(1)定义函数 avg,功能是读取某天的数据文件,计算该天空气质量指数(AQI) 的平均值并返回,代码如下。请在划线①处应填入合适的代码。def avg(filename): df=pd.read_csv(filename) df1=df[df.columns[2:]] #取类型及其后的所有列 g=df1.groupby(①________,as_index=False).mean() return ②________划线②处应填入的代码为________(单选,填字母)。A.df[df.类型=='AQI']B.df1.AQI C.g.AQID.g[g.类型=='AQI'](2)统计本月各城市空气质量最长连续优、良的天数(按照环境空气质量标准,空气污染指数 AQI≤50为优级,AQI≤100 为良好),代码如下,绘制的图表如图 c 所示。请在划线处填入合适的代码。图cimport pandas as pdimport matplot1ib.pyplot as pltn=10 #城市个数count=[0]*ndaymax=[0]*nfor i in range(1, 31): day=str(i) if len(day) <2: day='0' +str(i) daydata=' 202204' +day+' . csv' dayaqi=avg(daydata) city=dayaqi.columns[1:n+1] for j in range (n) : t=city[j] if dayaqi.at[0,t] <= 100: ①________ else: if count[j]>daymax[j]: daymax [j]=count[j] count[j]=0 for k in range (n): if count [k]>daymax[k]: ②________print (daymax)p1t.figure(figsize=(12,4))x= ③________y=daymaxplt.bar(x, y)p1t.show()重难点2 利用函数按列进行数据统计1.某竞赛获奖名单已公布,现要对获奖情况进行数据处理和分析。请回答下列问题: 图a 图b(1)将获奖名单读取到DataFrame对象df中,如图a所示,若要编写Pandas程序分析出浙江省内获得满分400分的总人数。下列方法正确的是________(单选,填字母)。A.从df中筛选出省份为“浙江”的数据df1,再从df1中筛选出总分为“400”的数据df2,最后对df2中的“姓名”数据列使用count()函数统计出总人数B.对df中数据按“总分”降序排列并保存到df1中,再从df1中筛选出省份为“浙江”的数据df2,最后对df2中的“姓名”数据列使用sum()函数统计出总人数C.对df中数据按“总分”为关键字进行分组,并使用count()函数统计出总人数,得到数据df1,再从df1中筛选出省份为“浙江”的总人数(2)提取获奖名单中的部分数据列,结果如图b所示。小陆想统计各省份一等奖获奖学生的准考证号,存储在字典dic中,h为一等奖获奖分数线。实现上述功能的部分python程序如下,请在划线处填入合适的代码。import pandas as pd#读取如图b所示数据,保存到DataFrame对象df中,代码略#将DataFrame对象df转换为列表lst,代码略#列表lst的值为[[″北京″,″BJ-0032″,400],…,[″江苏″,″JS-0009″,350],[″四川″,″SC-0003″,384]]h = int(input(″输入一等奖获奖分数线″))i = 0s =″″dic = { } #字典 dic 中的键为省份名称,值为一等奖获奖学生的准考证号while i < len(lst): if ①________: city = lst[i][0] if city in dic : dic[city] +=″,″+lst[i][1] else: ②____________ i += 1(3)获奖名单新增“获奖等级”数据列,存储在文件“data.xlsx”,如图c所示,小陆想分析出一等奖获奖人数最多的前5个省份(没有并列情况),并绘制如图d所示的柱形图,实现该功能的部分Python程序如下。 图c图dimport pandas as pdimport matplotlib.pyplot as pltplt.rcParams[″font.sans-serif″] = [″SimHei″] #设置图表显示中文字体df = pd.read_excel(″data.xlsx″)df1 =①________ #选取相应的一等奖数据df2 = df1.groupby(″省份″).count() #分组统计总人数df2.rename(columns = {″姓名″:″获奖人数″}, inplace = True) #更改列标题名称g = df2.sort_values(″获奖人数″, ascending = False).head(5)plt.title(″一等奖获奖人数最多的前 5 个省份″)plt.bar( ②________ ) #绘制柱形图plt.ylabel(″获奖人数″)plt.show()①请在程序中划线处填入合适的代码。②程序的划线处中应填入的正确代码为________(单选,填字母)。A.g.省份,g.获奖人数 B.df2[″省份″],df2[″获奖人数″]C.g.index,g.获奖人数 D.df2.index,df2.获奖人数2.为了督促学生寒假坚持体育锻炼,老师采用线上打卡的方式收集学生锻炼情况,数据如图a所示。图a图b为统计冬锻完成情况,编写 Python 程序。请回答下列问题:(1)定义outdata函数,其中参数dftmp是DataFrame数据类型,数据由图a所示的Excel表导入。函数功能是:统计每天每个学生的锻炼项目个数,返回含有“学籍号”、“姓名”和“项目个数”信息的二维列表。函数代码如下,划线处应填入的代码为________(多选,填字母)。A.dftmp.at[i,j]==″√″B.dftmp[i][j]==″√″C.dftmp.at[j,i]==″√″D.dftmp[j][i]==″√″def outdata(dftmp): a=[] for i in dftmp.index: #dftmp 的行索引 itemn=0 for j in dftmp.columns[4:]: #dftmp 中从“跑步”开始的列标题 if ______________ : itemn+=1 a.append([str(df[″学籍号″][i]),df[″姓名″][i],itemn]) return a(2)冬锻打卡成功的标准为累计运动 15 天,每天锻炼项目达到 3 项及以上。统计输出寒假体育锻炼达标的学生名单,并制作四个项目的运动次数对比图,部分界面如图b和图c所示。部分Python程序如下,请在划线处填写合适的代码。图cimport pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel(″sport.xls″)lst=outdata(df)print(″冬锻打卡成功名单:″)i=0;flag=[False]*len(lst)while i if: xjh=lst[i][0] flag[i]=True ①________ for j in range(i+1,len(lst)): if lst[j][0]==xjh and lst[j][2]>=3: flag[j]=True days+=1 if days>=15:print(lst[i][0]+″/″+lst[i][1]+″/″+str(days)+″天″) ②________ydl=df.count() #统计各列非空单元格数量,结果为Seriesitem=[″跑步″,″跳绳″,″俯卧撑″,″仰卧起坐″]nums=③________plt.bar(item,nums,label=″运动次数″)(3)程序加框处代码有错,请改正。3.小帅收集了2023年的销售数据并存储在″超市销售数据.csv″文件中,部分数据如图a所示。分析某月的销售情况,柱形图如图b所示。部分Python程序如下:顾客编号,大类名称,销售日期,小类名称,商品类型,单位,销售数量,商品单位,销售金额 5,粮油,20230101,番茄酱,一般商品,瓶,1,6.7,6.7 10,日配,20230101,冷藏果粒酸乳,一般商品,盒,1,8.9,5.9 26,冲调,20230101,麦片/粉,一般商品,袋,1,27.7,27.7 31,洗化,20230101,洗衣皂,一般商品,块,1,4.9,4.9 31,洗化,20230101,软抽纸巾,一般商品,提,1,9.7,6.9 49,蔬果,20230101,花果,生鲜,千克,0.902,9.96,8.98 8,日配,20230101,利乐砖纯奶,一般商品,提,1,65,49 15,家居,胶棉拖把,一般商品,把,1,70,70 50,休闲,20230101,软糖,一般商品,袋,1,10.9,10.9 1,蔬果,20230101,芽菜,生鲜,千克,0.456,2.78,1.27 5,蔬果,20230101,鲜调味,生鲜,千克,0.24,9.6,2.3 2,洗化,20230101,无芯纸,一般商品,提,1,24.9,18.9 9,休闲,20230101,趣味/休闲,一般商品,盒,1,6.9,6.9 46,蔬果,20230101,苹果类,生鲜,千克,1.776,4.98,8.84图a图bimport pandas as pdimport matplotlib.pyplot as pltdf=pd.read_csv(″超市销售数据.csv″) #读取文件中的数据df.insert(0,″月份″,″″) #插入列for i in(1)________: data=str(df.at[i,″销售日期″]) #通过行标签和列标签选取单个值 df.at[i,″月份″]=data[4:6]m=int(input(″请输入需查询的月份:″))if m>=10: month=str(m)else: month=″0″+str(m)g=df[①________] #筛选月份数据g=g.groupby(″大类名称″,as_index=False)[″销售金额″].sum() #分组求和g=x=g[″大类名称″]y=②________plt.bar(x,y) #绘制柱形图#设置绘图参数,显示如图b所示的柱形图,代码略请回答下列问题:(1)为提取“销售日期”中月份数据,划线处应填入的代码是________(单选,填字母)。A.df.index B.df.values C.df.columns(2)请在程序中划线①②处填入合适的代码。(3) 加框处实现按“销售金额”降序排列后取前10项,下列代码中能正确实现的有________(多选,填字母)。(注:全部选对的得2分,选对但不全的得1分,不选或有选错的得0分)A.g.sort_values(″销售金额″,ascending=False).tail(10)B.g.sort_values(″销售金额″,ascending=False).head(10)C.g.sort_values(″销售金额″,ascending=True)[:11]D.g.sort_values(″销售金额″,ascending=False)[:10]4.小陈在气象部门得到了一份2022年不同城市的月平均日照时数(单位:kW·h/m2/day)数据,存放在Excel文件“日照.xlsx”中。部分界面如图所示。图a请回答下列问题:(1)第1步,小陈编写了如下代码。import pandas as pddf = pd.read_excel(″日照.xlsx″)mdays = [31,28,31,30,31,30,31,31,30,31,30,31]months = list(df.columns)for i in df.index : s = 0 for j in range(12): m = df.at[i,months[j +1]] s += mdays [j] s += m*mdays[j] df.at[i,″年度平均″]= round(s/365,2)该程序实现的功能是________。(2)第2步,仅考虑平均日照时数因素,选出最适合用光伏发电给智能农业大棚提供能源的十个城市。划线处应填入的代码为________(单选,填字母)。df=________A.df.sort_values(″城市名″,ascending=False).head(10)B.df.sort_values(″城市名″).tail(10)C.df.sort_values(″年度平均″,ascending=False)[:10]D.df.sort_values(″年度平均″,ascending=False).tail(10)#输出结果如图b所示,代码略年度平均最高的10个城市为: 日喀则地区 5.83 阿里地区 5.66 三沙市 5.57 山南地区 5.53 拉萨市 5.53 那曲地区 5.11 昌都地区 4.91 海西蒙古族藏族自治州 4.88 和田地区 4.84 攀枝花市 4.83图b(3)小陈想在家乡温州建一个智能大棚,采用光伏发电加蓄电设备供电,面积为1平方米的光伏板容量约为0.3 kW/块,光伏的充放电效率为80%,大棚每天消耗的最低电能约为30 kW·h,为确保每月能正常供电,需要1平方米的光伏发电板共①________块。(日均发电量=电池板的容量/块×块数×平均日照时数×充放电效率)建设光伏发电设备前要先获得当地的平均日照时数情况,小陈通过如下代码获取相关数据。程序运行界面如图c所示:图cres=df[df[″城市名″]==″温州市″]res=res.values[0][1:13].②________print(″温州市月平均日照最小值为”,res)5.小周要统计高二年级各班的行为规范得分情况,部分扣分数据如图a所示。图a(1)观察数据,发现存在重复扣分的记录,如图a第2、3行所示。现需对数据进行整理,以下操作合理的是____(单选,填字母)。A.对班级、记录员均相同的记录去重B.对日期、关联学生、项目名称均相同的记录去重C.对关联学生、项目名称、项目扣分均相同的记录去重(2)如图a第4行“关联学生”所示,多名学生信息以分号分隔集中登记。现需要将这些关联学生信息进行拆分,每位学生各一条记录。实现拆分功能的部分Python程序如下,请在划线处填入合适的代码。import pandas as pddf=pd.read_excel(″高二年级学生行规扣分明细.xlsx″)i=0while i s=①________ t=0 for j in range(len(s)): if s[j]==″;″: df=pd.concat([df, df[i:i+1]],ignore_index=True) #将当前记录复制并添加到表末尾,concat函数用于连接两个DataFrame对象 df.at[len(df)-1,″关联学生″]=s[t:j] df.at[i,″关联学生″]=s[j+1:] ②________ i=i+1图b(3)该校高二年级共有16个班级,统计各班的行为规范得分(班级行为规范得分=100分-本班所有学生扣分),并绘制如图b所示的柱形图,实现该功能的部分Python程序如下,请在划线处填入合适的代码。import matplotlib.pyplot as pltpoint=df.groupby(″①________″,as_index=False).sum()cla=[100]*16for i in range(len(point)): m=point.at[i,″班级″] cla[m-1]-=point.at[i,″项目扣分″]x=[str(i)+″班″ for i in range(1,17)]y=②________#设置绘图参数,代码略plt.bar(x,y)plt.show()6.某中学“7选3”选考科目的选科数据存储在Excel文件“选科数据.xlsx”中,部分数据及格式如图a所示。图中“1”表示选择该科目为选考科目。现对数据进行统计分析,编写Python程序,请回答下列问题。图a(1)定义fenban函数,功能为:根据选考科目选报的总人数allrs及该科目最大班额maxbrs,计算需开设的班级数。函数代码如下,请在划线处填入合适的代码。def fenban(allrs,maxbrs): bjnum=allrs∥maxbrs if ________________: bjnum+=1 return bjnum(2)统计7选3各科的选报人数,输出各科的选报情况及开班情况,如图b所示。部分程序代码如下,请在划线处填入合适的代码。物理 人数:398 班级数:10 化学 人数:408 班级数:11 生物 人数:133 班级数:4 政治 人数:261 班级数:7 历史 人数:244 班级数:7 地理 人数:361 班级数:10 技术 人数:136 班级数:4图bimport pandas as pddf=pd.read_excel(″选科数据.xlsx″)km=[″物理″,″化学″,″生物″,″政治″,″历史″,″地理″,″技术″]m=40 #每个班的最多人数,班额bj=[0]*7xkrs=[0]*7 #存储选考科目的选报人数p=0for j in km: __①________ for i in range(len(df)): if df.at[i,j]==1: cnt+=1 ②________ bj[p]=fenban(cnt,m)p=p+1for i in range(7): print(km[i],″人数:″,xkrs[i],″班级数:″,bj[i])(3)绘制选考科目选科人数情况的柱形图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltx=kmy=__________________plt.bar(x,y)#绘制柱形图#设置绘图参数,显示如图c所示柱形图,代码略图c(4)下列程序能实现按班级统计各班选报技术学科人数的是________(单选,填字母)。A.jsrs_bj=df.groupby(″班级″).″技术″.count()B.jsrs_bj=df.sort_values(″班级″).count()C.jsrs_bj=df.groupby(″班级″)[″技术″].count()D.jsrs_bj=df.groupby(″班级″).技术.mean()7.第19届杭州亚运会已完美落幕,亚运会赛事以“杭州为主,全省共享”的原则分布在杭州、宁波、温州、湖州、绍兴、金华各地。大会共有40个大项,61个分项,最终诞生了481块金牌。小李作为一名体育爱好者想重温大会赛程安排,他从杭州亚运会的官网上采集了相关数据,整理后存储在“杭州第19届亚运会总赛程.xlsx”文件中。如图a所示(0表示有赛事但不产生金牌,其他数字表示当天产生的金牌数)。图a为了更清楚地了解相关赛事信息,小李编写了Python程序,请回答以下问题。(1)足球是小李最关注的大项,为了解足球的赛程安排,划线处应填入的代码为________(单选,填字母)A.df.大项==″足球″ B.df[″大项″==″足球″]C.df[df.大项==″足球″] D.df[df[″大项″]==足球]import pandas as pddf=pd.read_excel(″杭州第 19 届亚运会总赛程.xlsx″)df2=________print(df2)(2)足球项目的比赛分布在杭州等城市的八个场馆,了解各个场馆举办足球赛事的具体场次,找到连续举办足球赛事最多的场馆,如图b所示。程序代码如下,请在划线处填入合适的代码。黄龙体育中心体育场 [9/19, 9/21, 9/24, 9/27, 9/28, 10/1, 10/4, 10/6, 10/7] 临平体育中心体育场 [9/19, 9/21, 9/22, 9/24, 9/25, 9/28, 9/30, 10/3] 上城体育中心体育场 [9/20, 9/22, 9/24, 9/25, 9/27, 9/28, 10/1, 10/3, 10/7] 萧山体育中心体育场 [9/19, 9/20, 9/21, 9/22, 9/24, 9/25, 9/27, 9/28, 10/1, 10/4] 金华体育中心体育场 [9/19, 9/21, 9/24, 9/27] 浙江师范大学东体育场 [9/19, 9/21, 9/24, 9/27] 温州奥体中心体育场 [9/21, 9/22, 9/24, 9/25, 9/27, 9/28, 9/30] 温州体育中心体育场 [9/22, 9/24, 9/25, 9/27, 9/28, 9/30] 连续举办足球赛事最多的场馆:萧山体育中心体育场图bdic={}max=0;maxsta=″″lst=df2.竞赛场馆.tolist() #将数据转换为列表for i in lst: dic[i]=[]for i in df2.index: c=0 sta=df2[″竞赛场馆″][i] for j in df2.columns[2:-3]: if df2.at[i,j]==0 or df2.at[i,j]==1: ①________ c=c+1 if c>max: max=c;maxsta=sta else: __②________for i in dic: print(i,dic[i])print(″连续举办足球赛事最多的场馆:″,③________ )(3)足球在亚运会期间总共产生两枚金牌,统计分析其他大项产生的金牌总数,找出产生金牌总数最多的十个大项,并绘制图形如图c所示。程序代码如下,请在划线处填入合适的代码。图cimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['simhei'] #图表中文标签显示为黑体grp=df.groupby(①________ , as_index=False).金牌总数.sum()grp=grp.sort_values(″金牌总数″,ascending=False).②________x=grp.大项y=grp.金牌总数#设置图表参数,代码略。专题9 pandas数据统计学习目标 1.对DataFrame对象按列进行公式计算,描述DataFrame对象数据以字典中键为列的存储形式;2.对每个键对应一列数据多个值进行切片,掌握取出不同数据区域内容的方法;3.运用函数统计对象的平均值等操作,运用排序函数对数据进行有序排列;4.运用groupby函数对数据进行分组的方法,并在分组的基础上进行数据统计.Pandas有Series和DataFrame两种对象,这两种对象均有index和values属性,Series对象的values是一维的,DataFrame的values是二维的,因此DataFrame对象比Series对象多一个columns属性,可以理解为index表示行号,columns表示列名。pandas处理的对象主要是DataFrame,取出DataFrame中的一列,降维为Series对象,可以用list函数转换为列表,对某列的值进行切片,可以转换为一个数值。可以对记录选取、筛选和分组操作,灵活地区分不同类型的数据,可以对记录进行排序操作,实现数据的有序显示。可以对各条记录的字段进行遍历,统计符合要求字段值的数量、总和、平均值以及最值。(2024年1月浙江省选考)某学院举行运动会,比赛设跳高、100米等项目,每个项目分男子组和女子组。现要进行报名数据处理和比赛成绩分析。请回答下列问题: (1)运动会报名规则为:对于每个项目的男子组和女子组,每个专业最多各报5人(如“软件工程”专业在男子跳高项目中最多报5人)。软件工程专业的报名数据保存在DataFrame对象df中,如图a所示。若要编写Python程序检查该专业男子跳高项目报名是否符合规则,下列方法中,正确的是________(单选,填字母)。A.从df中筛选出性别为“男”的数据dfs,再从dfs中筛选出项目为“跳高”的数据,判断筛选出的数据行是否超过5行B.对df中数据按性别排序并保存到dfs中,再从dfs中筛选出项目为“跳高”的数据,判断筛选出的数据行是否超过5行C.从df中筛选出项目为“跳高”的数据dfs,判断dfs中是否有连续5行以上的男生数据(2)运动员比赛成绩的部分数据如图b所示。根据已有名次计算得,第1名至8名分别计9,7,6,5,4,3,2,1分,第8名之后计0分。实现上述功能的部分Python程序如下,请在程序中划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as plt#读取如图b所示数据,保存到 DataFrame 对象 df1 中,代码略f = [9, 7, 6, 5, 4, 3, 2, 1]for i in range(0,len(df1)): rank = df1.at[i,″名次″] #通过行、列标签取单个值 score = 0 if rank <= 8: ______________df1.at[i,″得分″] = score(3)根据上述 df1 中的得分数据,统计各专业总分,绘制如图 c 所示的柱形图,实现该功能的部分Python程序如下:df2 = dfl.groupby(″________″,as_index=False).sum() #分组求和#设置绘图参数,代码略plt.bar(x,y)①请在程序中划线处填入合适的代码。②程序的方框中应填入的正确代码为________(单选,填字母)A.x=df1[″专业″]y=df1[″总分″]B.x=df2[″专业″]y=df2[″得分″]C.df1[″专业″]=″专业″df1[″总分″]=″总分″D.df2[″专业″]=″专业″df2[″得分″]=″得分″答案 (1)A (2)score=f[rank-1]或score=f[int(rank)-1] (3)①专业 ②B解析 本题考查利用Pandas模块进行数据处理。(1)A选项分二次筛选后,得到该专业男生参加跳高的人数,并检查数据。(2)名次为1-8的可以在列表f中取出对应的得分,但列表的索引下标是从0开始的。(3)①从图表中可以看出是按″专业″进行分组;②图表横轴为专业名称,纵轴为各专业的得分情况。重难点1 利用Pandas批量处理文件Pandas主要功能是计算一个集合对象中某个字段的记录数量、总和、平均值和最值(最大值或最小值)。这个集合可以是通过筛选找到符合处理条件的数据(子集),也可以是通过分组,将某列相同字段值的记录组合在一起,形成一个个的分组,再分别统计各个分组的数量、和、平均值和最值。这些功能Excel软件也可以实现,但若是数据分布在多个数据文件时,Excel软件就要手工不断地打开数据,重复进行统计,而Pandas可以通过算法,利用循环结构,将这些操作让计算机自动完成。例题 小红收集了部分城市2021年全年每天PM2.5、PM10、CO浓度数据,每天的数据分别保存在以8位日期字符串命名的CSV文件中,部分文件如图a所示,每个文件记录了一天24小时的监测数据,示例如图b所示。为统计分析城市A全年各月份PM2.5的月平均浓度(当月的日平均浓度的平均值),编写Python程序。请回答下列问题:(1)定义pmday函数,功能为:读取某天的CSV文件,返回城市A当天PM2.5的日平均浓度。函数代码如下,划线处应填入的代码为________(单选,填字母)。A.df['类型']=='PM2.5'B.df['类型'=='PM2.5']C.df[df['类型']]=='PM2.5'D.df[df['类型']=='PM2.5']import pandas as pddef pmday(dayfile): df = pd.read_csv(dayfile) #读取文件dayfile中的数据 df =________ return df['城市A'].mean() #返回城市A当天PM2.5的日平均浓度(2)统计城市A各月份PM2.5的月平均浓度并绘制线形图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as plt def tstr(t):if t<10: retrun '0'+str(t) else: retrun str(t)pm = [0] * 12mdays=[31,28,31,30,31,30,31,31,30,31,30,31] #2021年每月天数for m in range(12): sm = 0 mstr = tstr(m+1) for d in range(①________): dstr = tstr(d+1) dayfile = '2021' + mstr + dstr + '.csv' sd = pmday(dayfile) ②________ pm[m] = sm/mdays[m]x = [1,2,3,4,5,6,7,8,9,10,11,12]y=③________plt.plot(x,y) #绘制线性图#设置绘图参数,显示如图c所示线形图,代码略(3)城市A 2021年PM2.5年平均浓度为34.6微克/立方米。由图c可知,城市A 2021年PM2.5月平均浓度超过年平均浓度的月份共________个。明考向 本题考查利用Pandas进行数据统计精点拨 (1)可以通过布尔型数据选取满足条件的行。(2)计算各月份PM2.5浓度的平均值,可以累加各月的每天PM2.5浓度的平均值。变量dayfile表示每天的数据文件名,题干已经提示“每天的数据分别保存在以8位日期字符串命名的CSV文件”,调用函数pmday(dayfile) ,可以得到当天PM2.5的日平均浓度,并保存于变量sd。当月的各天PM2.5的日平均浓度需要累加起来,最后求均值。③空横坐标为月份,纵坐标为PM2.5月平均浓度,即列表pm的数据。(3)超过年平均浓度的月份为1、2、3、4、11月答案 (1)D (2)①mdays[m] ②sm += sd ③pm (3)5变式 学校食堂以服务质量进行了调查问卷,调查项目共 5 项(具体内容略)。12个班级的调查结果分别存储在“dy01.csv”“dy02.csv”等文件中(如图a所示),每个文件部分界面如图b所示。现需要分析每个问题选“A”的情况,采用Python编制程序代码,请回答下列问题。(1)定义fun_A函数实现统计某个班级5个问题的选“A”的人数,请在划线处填入合适代码。import pandas as pddef fun_A(file): df=pd.read_csv(file) A_list=[] for col in df.columns[1:]: ________________ A_list.append(c) return A_list(2)统计12个班级每个问题选“A”的总人数,请在划线处填入合适代码。ans_list=[]s=″010203040506070809101112″for i in range(0,len(s)-1,2): filename=″dy″+ ①__________+″.csv″ res= fun_A(filename) ans_list.append(res)x=[″问题1″,″问题2″,″问题3″,″问题4″,″问题5″]y=[0,0,0,0,0]for i in range(5): s=0 for j in range(12):②__________ y[i]=s(3)根据上述统计的得分数据,统计每个问题选“A”的数量,绘制如图 c 所示的柱形图,请在划线处填入合适代码。图cimport matplotlib.pyplot as pltplt.title(″每个问题选A的总人数″)plt.bar(①__________,②__________,label='A 选项')plt.legend()plt.show()答案 (1)c=len(df[df[col]==″A″])(2)①s[i:i+2] ②s+=ans_list[j][i] (3)x,y解析 本题考查利用Pandas进行数据统计。(1)df.columns[1:]依次对应5个问题的名称,对每个问题进行筛选,找出选A的记录并统计数据,赋值给c,再将c添加到列表A_list中。(2) ①12个班级的班名存储在字符串s中,每个班名占两个数字,变量i表示每个班名的起始索引。②ans_list是一个二维数组,共12个元素,分别存储每个班5个问题的选A的人数,现要统计每个问题选A的总和,因此变量i是ans_list数组的列索引,变量j是ans_list数组的行索引。(3)图表的横轴为问题的名称x,纵轴为各个问题选A的总人数y。重难点2 利用函数按列进行数据统计DataFrame是Pandas处理的主要对象,index属性记录了每行记录所在的行索引,columns属性记录每列的名称。df.列名就可以表示该列所有的数据的集合,可以运用函数计算一个集合对象的记录数量、总和、平均值和最值(最大值或最小值)。通过筛选找到符合处理条件的数据(子集)集合,再对集合进行求和等计算。通过分组,将某列相同字段值的记录组合在一起,形成一个个的分组,再分别统计各个分组的数量、和、平均值和最值。例题 小明通过调查问卷收集了食堂满意度情况数据,保存在“data.csv”文件,如图a所示。图a图b为统计分析每个调查项目不同选项的人数及不满意率,编写Python程序。请回答下列问题:(1)统计每一项调查内容的总票数、满意、一般及不满意人数,程序运行结果如图b所示,import pandas as pdimport matplotlib.pyplot as plt #导入模块df=pd.read_csv(″data.csv″,encoding=″utf-8″)#读取csv文件中的数据cols=df.columns[1:]poll=len(df)data= {″调查项目″:[],″总票数″:[],″满意″:[],″一般″:[],″不满意″:[]}for colname in cols: dfc=df.groupby(①__________,as_index=False)[″序号″].count() data[″调查项目″].append(colname) data[″总票数″].append(poll) for j in dfc.index: name=dfc.at[j,colname] data[name].append(②__________)df2=pd.DataFrame(data) ; print(df2)(2)计算每个项目的“不满意率”(=“不满意”/“总票数”*100),并使用柱形图分析每个项目的“不满意率”情况,如图c所示,请在划线处填入合适的代码。图cdf2[″不满意率(%)″]=①__________x=②__________y=df2[″不满意率(%)″]plt.figure(figsize=(8,4))pl.title(″食堂调查问卷不满意率(%)情况″)plt.bar(x,y,label=″不满意率(%)″)plt.legend()思维点拨明考向 本题考查利用Pandas进行数据统计精点拨 (1)①一共有饭菜质量、饭菜价格等6个项目,每个项目都有满意、一般和不满意三个选项,因此需进行6次对不同项目进行分组统计,cols为项目名称的集合,colname是每个项目的名称,因此需按colname进行分组并统计各个选项的个数。以饭菜质量为例,得到的dfc对象如表所示。 饭菜质量序号0满意421一般5122不满意65②dfc对象是每个项目colname的满意、一般和不满意3个项目的投票数,遍历该对象,name是每个选项的名称,因此需将每个选项的值添加到字典中去。 (2)根据字典data创建了一个df2对象,①将在df2对象中新增"不满意率(%)"列,其值计算方法为不满意选项数除以总得票数,在图表中可知,其值大于1,因此需乘以100。②创建图表的x轴为各个调查项目答案 (1)①colname ②dfc.at[j,″序号″]或dfc[″序号″][j]或dfc.序号[j] (2)①df2[″不满意″]/df2[″总票数″]*100或df2[″不满意″]/po1l*100或df2.不满意/df2.总票数*100或df2.不满意/pol1*100或其他等价答案 ②df2[″调查项目″]或df2.调查项目变式 某学校开设选修课并在期末让学生对其进行满意度调查,选修课分艺术、体育、语言、计算机、职业技能等领域。现要进行报名数据处理和满意度分析, 请回答下列问题:图a图b(1)选修课开设的条件为:报名人数大于20人。其中计算机类选修课的报名数据保存在DataFrame对象df中,如图a所示。若要编写Python程序检查其中第1学期的“数字视音频处理”选修课是否符合开设条件,下列方法中,不正确的是________(单选,填字母)。A.对df中数据按开设学期排序并保存到dfs中,再从dfs筛选出选修课名称为“数字视音频处理”的数据,判断筛选出的数据行是否超过20行B.从df中筛选出选修课名称为“数字视音频处理”的数据dfs,再对dfs按开设学期进行升序排序,判断数据前21行的开设学期是否是第1学期C.从df中筛选出选修课名称为“数字视音频处理”的数据dfs,再按开设学期分组统计个数,判断第1学期的个数是否超过20(2)计算机类选修课学生的满意度调查部分数据如图b所示。满意度分3个等级:A.满意、B.一般、C.不满意,分别计1分、0分、-1分,基础分为100分。实现计算各选修课的满意度功能的部分Python程序如下,请在划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as plt#读取如图b所示数据,保存到DataFrame对象df1中,代码略score=[1,0,-1]for i in range(0,len(df1)): rank=df1.at[i,″满意度″] ①________ df1.at[i,″得分″]=marka=df1.groupby(″选修课名称″,as_index=False)[″得分″].②________for i in range(0,len(a)): a.at[i,″得分″]+=100(3)根据满意度进行降序排序,绘制如图c所示的柱形图,实现该功能的部分Python程序如下:图ca=a.sort_values(″①__________″,ascending=False)#设置绘图参数,代码略x=②________y=a[″得分″]plt.bar(x,y) #绘制柱形图答案 (1)A (2)①mark=score[ord(rank)-ord(″A″)]或 mark=score[ord(rank)-65] ②sum() (3)①得分 ②a[″选修课名称″]或 a.选修课名称解析 本题考查利用Pandas进行数据统计。(1)A选项筛选出的数据行包含其他学期的记录。(2)①满意度的等级依次为ABC,对应score中3个得分,需将ABC转换成012的索引,并在score列表中取出相应的值。②求出每门选修课的得分之和,因此该处为求和函数。(3)①从图上来看,是按得分降序排列。②图表的横轴为各门选修课的名称,需要从排好序的a对象中取出选修课名称列的内容。重难点1 利用Pandas批量处理文件1.高一年级(9个班级)进行“七选三”预选科。每个班一个Excel文件(如图a所示)存储预选科数据。数据表中“1”代表学生选择该科目,空白代表学生未选择该科目(某班部分选科数据如图b所示)。请回答下列问题。图a图b(1)定义如下函数check(dfs)检查选考科目数是否有误,其中参数dfs为DataFrame对象,由如图b所示Excel数据导入。返回值erlst为列表,列表元素数据类型为整型,表示错误数据行对应的学生序号(例如第6行学生“戴*跃”的序号为5)。def check(dfs): erlst = [] for i in range(len(dfs)):xk_sum = 0 for j in dfs.columns[2:]: dyg = ①________ if dyg == 1: xk_sum += dyg if xk_sum != 3: erlst.append(②________)return erlst①在程序中划线处填入的正确代码为________(单选,填字母)。A.dfs.at['i','j'] B.dfs.at['j','i']C.dfs.at[i,j] D.dfs.at[j,i]②在程序中划线处填入合适的代码。(2)读取每个班级的Excel选科数据,若检查无误,则统计每个班级同时选报“物理”和“化学”学科的人数,存储在字典ans中。实现该功能的Python程序如下:import pandas as pdans = {}for i in range(1,10): filename = str(i)+'. xlsx' df =pd.read_excel(filename) errlist = check(df) if errlist != []: print(″请检查文件″, filename,″中序号为″, errlist,″的学生″) else: ①__________ #筛选同时选择物理和化学的数据记录存储在 df1中 ans[str(i)+'班'] = [②________] #形如{“1班”:[41]}①在程序划线处应填入的正确代码段为________(多选,填字母)。(注:全部选对的得 2 分,选对但不全的得1分,不选或有选错的得 0 分)A.df1 = df[df['物理']==1]df1 = df1[df1['化学']==1]B.df1 = df[df['物理']==1]df1 = df[df['化学']==1]C.df1 = df[df['化学']==1]df1 = dfl[df1['物理']==1]D.df1 = df[df['化学']==1]df1 = df[df['物理']==1]②在程序划线处填入合适的代码。(3)用字典ans创建并转置的DataFrame对象如图c所示,绘制柱形图如图d所示。实现该功能的Python程序如下:import matplotlib.pyplot as pltadf = pd.DataFrame(ans,index= ['人数']).Tplt.bar(______)#设置绘图参数,代码略plt.show()程序的划线处应填入的正确代码为________(单选,填字母)。A.adf.人数,adf.班级B.adf.班级,adf.人数C.adf.人数,adf.indexD.adf.index,adf.人数答案 (1)①C ②i+1 (2)①AC ②len(df1)或 len(df1.index) (3)D解析 (1)①函数check检查选考科目数是否有误,变量i表示学生所在行索引,j表示列的名称,因此用变量dfs.at[i,j]表示某个单元格的名称。②函数返回错误数据行对应的学生序号,序号为行索引i加1。(2)①先筛选出选物理的学生记录,保存在对象df1中,再在df1中筛选出选化学的学生;或者先筛选出选化学的学生记录,再筛选出选物理的学生记录。②统计每个班级同时选报“物理”和“化学”学科的人数,而该人数就是对象df1的记录的数量len(df1)。(3)利用字典ans创建对象adf,字典的键为各个列标题的名称,值为每一行的记录值,该对象只有一行记录,且设置index为人数。转置是对行列发生变换,一共有10行,对应的属性是index,只有一列,列的标题是人数。2.学校暑期开展“青春迎亚运”活动,邀请高二学生每日参加运动锻炼并进行线上打卡。每周收集一次相关数据,分别保存在相应的xlsx文件中,部分文件如图a所示;每个文件记录了一周7天的打卡数据,示例如图b所示,其中运动时长单位:分钟。图a图b为统计分析学生锻炼情况,给出周报数据,编写Python程序,请回答以下问题:(1)定义px函数,功能为:读取某一周的打卡数据,将其按班级进行排序操作并返回结果。函数代码如下,将划线处代码补充完整。import pandas as pddef px(file_week): df=pd.read_excel(file_week) df=df.sort_values(________,ignore_index=True) #按班级升序排序,参数ignore_index=True 表示更新索引 return df(2)统计某一周各运动项目的参与人次,并绘制柱形图,部分Python代码如下:import matplotlib. pyplot as plts=input(″请输入文件名:″)df=px(s)df1=df.groupby(″运动项目″,as_index=False).①________ #统计各运动项目参与人次df1.rename(columns={″学号″:″参与人次″},inplace=True) #更改列标题plt.bar(②________)plt.xlabel(″运动项目″)plt.ylabel(″参与人次″)plt.show()划线处应填入的代码为________(单选,填字母)。A.①count() ②df1[″参与人次″],df1[″运动项目″]B.①sum() ②df1[″参与人次″],df1[″运动项目″]C.①sum() ②df1.运动项目,df1.参与人次D.①count() ②df1.运动项目,df1.参与人次(3)统计某一周每班各学生的总运动时长后,比较得出该周每班最高的前两位时长,部分Python程序代码如下,请在划线处填入合适的代码。qp=[[0 for i in range(m)]for j in range(n)]'''定义数组qp记录每班各学生一周运动总时长,n为班级数,m为每班人数。其中qp[0][0]~qp[0][m-1]存储1班1号~m号同学的每周运动总时长,以此类推,qp[n-1][0]~qp[n-1][m-1]存储n班1号~m号同学的每周运动总时长。'''print(″本周每班最高的前两位时长分别为:″)i=0while i num=df[″学号″][i] cla=df[″班级″][i] ①________ if i!=0 and df[″班级″][i]!=df[″班级″][i-1] or②________: cla=df[″班级″][i-1] k1=0;k2=0 for j in range(1,len(qp[cla-1])): if qp[cla-1][j]>qp[cla-1][k1]: ③________ k1=j elif qp[cla-1][j]>qp[cla-1][k2]: k2=j print(cla,″班″,qp[cla -1][k1],qp[cla -1][k2]) i=i+1(4)统计某一周各运动项目的参与人次后绘制柱形图如图c所示,由图可知,该周参与人气最高的运动项目为______________。图c答案 (1)'班级' (2)D (3)①qp[cla-1][num-1]+=df['运动时长'][i] ②i==len(df)-1 ③k2=k1 (4)跑步解析 (1)题目要求按班级进行排序。(2)统计各运动项目参与人次用count函数。图表的x和y轴分别为运动项目和参与人次。(3)①从df中获取每位同学的数据。while循环遍历df中的每一位同学,num和cla对应该同学的班级和学号,则可对qp进行赋值,获取每位同学的运动时长。②最后一个班级的情况。条件i!=0 and df[″班级″][i]!=df[″班级″][i-1],表示找出两个不同的班级。若最后几位学生都在同一个班级,显示不满足条件df[″班级″][i]!=df[″班级″][i-1],那么最后一个班级的情况也要做出处理。③for循环对当前班级的学生进行遍历,选取最大的前两位时长,第一个判断语句qp[cla-1][j]>qp[cla-1][k1]时,则表示j学生的时长比之前的最大值大,则j同学变为新的最大值时长,k1同学变为新的第二大的时长。(4)略。3.为统计分析不同年级学生名字中的常用字,小王同学收集了本校所有学生的名字,并以入学年份为文件名分别保存在Excel文件中,文件如图a所示,每个文件包含了学生的年级、姓名和性别信息,如图b所示。编写Python程序。请回答下列问题:(1)定义getname函数,功能为:读取某年级的Excel文件,找出文件中同性别的学生,将学生姓名中的每个字(不包含姓氏,没有复姓学生)提取出来存储在列表mz中并返回列表。函数代码如下,请在划线处填写合适的代码。def getname(nj, xb): mz=[] df=pd.read_excel(nj+″学生名单.xlsx″) for i in df.index: xm=df.at[i,″姓名″] if ①________: for m in xm[1:]: mz.append(m) return ②________(2)小王想统计女生名字中出现最频繁的10个字,部分Python程序如下,请在划线处选择合适的代码。import pandas as pdxb=input(″请输入性别:″) #输入性别″女″nianji=[″2020级″,″2021级″,″2022级″]mzs=[] #存储姓名中的字for nj in nianji: mzs=mzs+getname(nj,xb)data={'字':mzs,'个数':[1]*len(mzs)}df1=pd.DataFrame(data)df2=df1.groupby(″字″,as_index=False).count() #统计每个字出现的次数df3=__________划线处应选择的代码是________(单选,填字母)。A.df2.sort_values(″个数″,ascending=True)[:10]B.df2.sort_values(″字″,ascending=False).tail(10)C.df2.sort_values(″字″,ascending=True).tail(10)D.df2.sort_values(″个数″,ascending=False).head(10)(3)将统计结果(10个最频繁的字)绘制成柱形图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltplt.title(xb +″生取名常用字″)plt.bar(df3.字,__________)plt.show()答案 (1)① df.at[i,″性别″]==xb 或 df[″性别″][i]==xb 或 df性别[i]==xb ②mz (2)D (3)df3.个数 或 df3[″个数″]解析 (1)①遍历学生名单每一行,取出当前行学生姓名,找出当前行中性别df.at[i,″性别″]等于性别xb的学生记录。②将符合条件学生名字中每个文字存储到列表mz,并返回列表。(2)利用字典data创建一个df1对象,该对象有“字”和“个数”两列,“字”列是提取的每个姓名中的字符,对应的数量均为1,按“字”分组并统计出现的次数,因此需按″个数″进行降序排列,并取出最大(最前面)的10条记录。(3)图表中横轴为出现的最常见的10个字,纵轴为每个字对应出现的次数。4.小明利用“在线社团报名系统”收集了全校学生的社团报名信息,并将报名数据导出到“社团报名.xlsx”中,如图a所示。然后编写Python程序对报名数据进行处理,生成分别以班级名和社团名为文件名的Excel文件,以便分发给相应的社团指导老师和班主任。图a图b(1)在对表格进行数据整理时发现,关于“Jacky.Y”同学的记录可能存在的数据问题是________(选填:A.数据缺失 B.数据异常 C.逻辑错误 D.数据格式不一致)。(2)其中生成每个社团名单文件的过程是:先对报名数据按社团名称进行分类,并对选报同一社团的学生按班级进行升序排序,然后生成各个社团名单文件,如图b所示。对应的程序代码如下,请在划线处填写合适的代码。import pandas as pddef read_file(filename): #读入报名数据的原始文件,并将表中的数据转换成列表,代码略def save_file(a): #保存名单到相应社团的Excel电子表格文件 df = pd.(共171张PPT)第二部分 算法与程序设计专题9 pandas数据统计1.对DataFrame对象按列进行公式计算,描述DataFrame对象数据以字典中键为列的存储形式;2.对每个键对应一列数据多个值进行切片,掌握取出不同数据区域内容的方法;3.运用函数统计对象的平均值等操作,运用排序函数对数据进行有序排列;4.运用groupby函数对数据进行分组的方法,并在分组的基础上进行数据统计.目 录CONTENTS体系构建01真题再现02考点精练03当堂检测04课后练习05体系构建1Pandas有Series和DataFrame两种对象,这两种对象均有index和values属性,Series对象的values是一维的,DataFrame的values是二维的,因此DataFrame对象比Series对象多一个columns属性,可以理解为index表示行号,columns表示列名。pandas处理的对象主要是DataFrame,取出DataFrame中的一列,降维为Series对象,可以用list函数转换为列表,对某列的值进行切片,可以转换为一个数值。可以对记录选取、筛选和分组操作,灵活地区分不同类型的数据,可以对记录进行排序操作,实现数据的有序显示。可以对各条记录的字段进行遍历,统计符合要求字段值的数量、总和、平均值以及最值。真题再现2(2024年1月浙江省选考)某学院举行运动会,比赛设跳高、100米等项目,每个项目分男子组和女子组。现要进行报名数据处理和比赛成绩分析。请回答下列问题:(1)运动会报名规则为:对于每个项目的男子组和女子组,每个专业最多各报5人(如“软件工程”专业在男子跳高项目中最多报5人)。软件工程专业的报名数据保存在DataFrame对象df中,如图a所示。若要编写Python程序检查该专业男子跳高项目报名是否符合规则,下列方法中,正确的是________(单选,填字母)。A.从df中筛选出性别为“男”的数据dfs,再从dfs中筛选出项目为“跳高”的数据,判断筛选出的数据行是否超过5行B.对df中数据按性别排序并保存到dfs中,再从dfs中筛选出项目为“跳高”的数据,判断筛选出的数据行是否超过5行C.从df中筛选出项目为“跳高”的数据dfs,判断dfs中是否有连续5行以上的男生数据(2)运动员比赛成绩的部分数据如图b所示。根据已有名次计算得,第1名至8名分别计9,7,6,5,4,3,2,1分,第8名之后计0分。实现上述功能的部分Python程序如下,请在程序中划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as plt#读取如图b所示数据,保存到 DataFrame 对象 df1 中,代码略f = [9, 7, 6, 5, 4, 3, 2, 1]for i in range(0,len(df1)): rank = df1.at[i,″名次″] #通过行、列标签取单个值 score = 0 if rank <= 8: ______________df1.at[i,″得分″] = score(3)根据上述 df1 中的得分数据,统计各专业总分,绘制如图 c 所示的柱形图,实现该功能的部分Python程序如下:②程序的方框中应填入的正确代码为________(单选,填字母)A.x=df1[″专业″]y=df1[″总分″]B.x=df2[″专业″]y=df2[″得分″]C.df1[″专业″]=″专业″df1[″总分″]=″总分″D.df2[″专业″]=″专业″df2[″得分″]=″得分″答案 (1)A (2)score=f[rank-1]或score=f[int(rank)-1] (3)①专业 ②B解析 本题考查利用Pandas模块进行数据处理。(1)A选项分二次筛选后,得到该专业男生参加跳高的人数,并检查数据。(2)名次为1-8的可以在列表f中取出对应的得分,但列表的索引下标是从0开始的。(3)①从图表中可以看出是按″专业″进行分组;②图表横轴为专业名称,纵轴为各专业的得分情况。(1)运动会报名规则为:对于每个项目的男子组和女子组,每个专业最多各报5人(如“软件工程”专业在男子跳高项目中最多报5人)。软件工程专业的报名数据保存在DataFrame对象df中,如图a所示。若要编写Python程序检查该专业男子跳高项目报名是否符合规则,下列方法中,正确的是________(单选,填字母)。A.从df中筛选出性别为“男”的数据dfs,再从dfs中筛选出项目为“跳高”的数据,判断筛选出的数据行是否超过5行B.对df中数据按性别排序并保存到dfs中,再从dfs中筛选出项目为“跳高”的数据,判断筛选出的数据行是否超过5行C.从df中筛选出项目为“跳高”的数据dfs,判断dfs中是否有连续5行以上的男生数据考点精练3重难点1 利用Pandas批量处理文件Pandas主要功能是计算一个集合对象中某个字段的记录数量、总和、平均值和最值(最大值或最小值)。这个集合可以是通过筛选找到符合处理条件的数据(子集),也可以是通过分组,将某列相同字段值的记录组合在一起,形成一个个的分组,再分别统计各个分组的数量、和、平均值和最值。这些功能Excel软件也可以实现,但若是数据分布在多个数据文件时,Excel软件就要手工不断地打开数据,重复进行统计,而Pandas可以通过算法,利用循环结构,将这些操作让计算机自动完成。例题 小红收集了部分城市2021年全年每天PM2.5、PM10、CO浓度数据,每天的数据分别保存在以8位日期字符串命名的CSV文件中,部分文件如图a所示,每个文件记录了一天24小时的监测数据,示例如图b所示。为统计分析城市A全年各月份PM2.5的月平均浓度(当月的日平均浓度的平均值),编写Python程序。请回答下列问题:(1)定义pmday函数,功能为:读取某天的CSV文件,返回城市A当天PM2.5的日平均浓度。函数代码如下,划线处应填入的代码为________(单选,填字母)。A.df['类型']=='PM2.5'B.df['类型'=='PM2.5']C.df[df['类型']]=='PM2.5'D.df[df['类型']=='PM2.5']import pandas as pddef pmday(dayfile): df = pd.read_csv(dayfile) #读取文件dayfile中的数据 df =________ return df['城市A'].mean() #返回城市A当天PM2.5的日平均浓度(2)统计城市A各月份PM2.5的月平均浓度并绘制线形图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as plt def tstr(t):if t<10: retrun '0'+str(t) else: retrun str(t)pm = [0] * 12mdays=[31,28,31,30,31,30,31,31,30,31,30,31] #2021年每月天数for m in range(12): sm = 0 mstr = tstr(m+1) for d in range(①________): dstr = tstr(d+1) dayfile = '2021' + mstr + dstr + '.csv' sd = pmday(dayfile) ②________ pm[m] = sm/mdays[m]x = [1,2,3,4,5,6,7,8,9,10,11,12]y=③________plt.plot(x,y) #绘制线性图#设置绘图参数,显示如图c所示线形图,代码略(3)城市A 2021年PM2.5年平均浓度为34.6微克/立方米。由图c可知,城市A 2021年PM2.5月平均浓度超过年平均浓度的月份共________个。思维点拨明考向 本题考查利用Pandas进行数据统计精点拨 (1)可以通过布尔型数据选取满足条件的行。(2)计算各月份PM2.5浓度的平均值,可以累加各月的每天PM2.5浓度的平均值。变量dayfile表示每天的数据文件名,题干已经提示“每天的数据分别保存在以8位日期字符串命名的CSV文件”,调用函数pmday(dayfile) ,可以得到当天PM2.5的日平均浓度,并保存于变量sd。当月的各天PM2.5的日平均浓度需要累加起来,最后求均值。③空横坐标为月份,纵坐标为PM2.5月平均浓度,即列表pm的数据。(3)超过年平均浓度的月份为1、2、3、4、11月答案 (1)D (2)①mdays[m] ②sm += sd ③pm (3)5变式 学校食堂以服务质量进行了调查问卷,调查项目共 5 项(具体内容略)。12个班级的调查结果分别存储在“dy01.csv”“dy02.csv”等文件中(如图a所示),每个文件部分界面如图b所示。现需要分析每个问题选“A”的情况,采用Python编制程序代码,请回答下列问题。(3)根据上述统计的得分数据,统计每个问题选“A”的数量,绘制如图 c 所示的柱形图,请在划线处填入合适代码。图cimport matplotlib.pyplot as pltplt.title(″每个问题选A的总人数″)plt.bar(①__________,②__________,label='A 选项')plt.legend()plt.show()解析 本题考查利用Pandas进行数据统计。(1)df.columns[1:]依次对应5个问题的名称,对每个问题进行筛选,找出选A的记录并统计数据,赋值给c,再将c添加到列表A_list中。(2) ①12个班级的班名存储在字符串s中,每个班名占两个数字,变量i表示每个班名的起始索引。②ans_list是一个二维数组,共12个元素,分别存储每个班5个问题的选A的人数,现要统计每个问题选A的总和,因此变量i是ans_list数组的列索引,变量j是ans_list数组的行索引。(3)图表的横轴为问题的名称x,纵轴为各个问题选A的总人数y。答案 (1)c=len(df[df[col]==″A″])(2)①s[i:i+2] ②s+=ans_list[j][i] (3)x,y重难点2 利用函数按列进行数据统计DataFrame是Pandas处理的主要对象,index属性记录了每行记录所在的行索引,columns属性记录每列的名称。df.列名就可以表示该列所有的数据的集合,可以运用函数计算一个集合对象的记录数量、总和、平均值和最值(最大值或最小值)。通过筛选找到符合处理条件的数据(子集)集合,再对集合进行求和等计算。通过分组,将某列相同字段值的记录组合在一起,形成一个个的分组,再分别统计各个分组的数量、和、平均值和最值。例题 小明通过调查问卷收集了食堂满意度情况数据,保存在“data.csv”文件,如图a所示。图a图b为统计分析每个调查项目不同选项的人数及不满意率,编写Python程序。请回答下列问题:(1)统计每一项调查内容的总票数、满意、一般及不满意人数,程序运行结果如图b所示,import pandas as pdimport matplotlib.pyplot as plt #导入模块df=pd.read_csv(″data.csv″,encoding=″utf-8″)#读取csv文件中的数据cols=df.columns[1:]poll=len(df)data= {″调查项目″:[],″总票数″:[],″满意″:[],″一般″:[],″不满意″:[]}for colname in cols: dfc=df.groupby(①__________,as_index=False)[″序号″].count() data[″调查项目″].append(colname) data[″总票数″].append(poll) for j in dfc.index: name=dfc.at[j,colname] data[name].append(②__________)df2=pd.DataFrame(data) ; print(df2)(2)计算每个项目的“不满意率”(=“不满意”/“总票数”*100),并使用柱形图分析每个项目的“不满意率”情况,如图c所示,请在划线处填入合适的代码。图cdf2[″不满意率(%)″]=①__________x=②__________y=df2[″不满意率(%)″]plt.figure(figsize=(8,4))pl.title(″食堂调查问卷不满意率(%)情况″)plt.bar(x,y,label=″不满意率(%)″)plt.legend()思维点拨明考向 本题考查利用Pandas进行数据统计精点拨 (1)①一共有饭菜质量、饭菜价格等6个项目,每个项目都有满意、一般和不满意三个选项,因此需进行6次对不同项目进行分组统计,cols为项目名称的集合,colname是每个项目的名称,因此需按colname进行分组并统计各个选项的个数。以饭菜质量为例,得到的dfc对象如表所示。精点拨 ②dfc对象是每个项目colname的满意、一般和不满意3个项目的投票数,遍历该对象,name是每个选项的名称,因此需将每个选项的值添加到字典中去。(2)根据字典data创建了一个df2对象,①将在df2对象中新增"不满意率(%)"列,其值计算方法为不满意选项数除以总得票数,在图表中可知,其值大于1,因此需乘以100。②创建图表的x轴为各个调查项目答案 (1)①colname ②dfc.at[j,″序号″]或dfc[″序号″][j]或dfc.序号[j] (2)①df2[″不满意″]/df2[″总票数″]*100或df2[″不满意″]/po1l*100或df2.不满意/df2.总票数*100或df2.不满意/pol1*100或其他等价答案 ②df2[″调查项目″]或df2.调查项目变式 某学校开设选修课并在期末让学生对其进行满意度调查,选修课分艺术、体育、语言、计算机、职业技能等领域。现要进行报名数据处理和满意度分析, 请回答下列问题:图a图b(1)选修课开设的条件为:报名人数大于20人。其中计算机类选修课的报名数据保存在DataFrame对象df中,如图a所示。若要编写Python程序检查其中第1学期的“数字视音频处理”选修课是否符合开设条件,下列方法中,________(单选,填字母)。A.对df中数据按开设学期排序并保存到dfs中,再从dfs筛选出选修课名称为“数字视音频处理”的数据,判断筛选出的数据行是否超过20行B.从df中筛选出选修课名称为“数字视音频处理”的数据dfs,再对dfs按开设学期进行升序排序,判断数据前21行的开设学期是否是第1学期C.从df中筛选出选修课名称为“数字视音频处理”的数据dfs,再按开设学期分组统计个数,判断第1学期的个数是否超过20(2)计算机类选修课学生的满意度调查部分数据如图b所示。满意度分3个等级:A.满意、B.一般、C.不满意,分别计1分、0分、-1分,基础分为100分。实现计算各选修课的满意度功能的部分Python程序如下,请在划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as plt#读取如图b所示数据,保存到DataFrame对象df1中,代码略score=[1,0,-1]for i in range(0,len(df1)): rank=df1.at[i,″满意度″] ①________ df1.at[i,″得分″]=marka=df1.groupby(″选修课名称″,as_index=False)[″得分″].②________for i in range(0,len(a)): a.at[i,″得分″]+=100(3)根据满意度进行降序排序,绘制如图c所示的柱形图,实现该功能的部分Python程序如下:图ca=a.sort_values(″①__________″,ascending=False)#设置绘图参数,代码略x=②________y=a[″得分″]plt.bar(x,y) #绘制柱形图答案 (1)A (2)①mark=score[ord(rank)-ord(″A″)]或 mark=score[ord(rank)-65] ②sum() (3)①得分 ②a[″选修课名称″]或 a.选修课名称解析 本题考查利用Pandas进行数据统计。(1)A选项筛选出的数据行包含其他学期的记录。(2)①满意度的等级依次为ABC,对应score中3个得分,需将ABC转换成012的索引,并在score列表中取出相应的值。②求出每门选修课的得分之和,因此该处为求和函数。(3)①从图上来看,是按得分降序排列。②图表的横轴为各门选修课的名称,需要从排好序的a对象中取出选修课名称列的内容。当堂检测4重难点1 利用Pandas批量处理文件重难点2 利用函数按列进行数据统计1.高一年级(9个班级)进行“七选三”预选科。每个班一个Excel文件(如图a所示)存储预选科数据。数据表中“1”代表学生选择该科目,空白代表学生未选择该科目(某班部分选科数据如图b所示)。请回答下列问题。图a图b(1)定义如下函数check(dfs)检查选考科目数是否有误,其中参数dfs为DataFrame对象,由如图b所示Excel数据导入。返回值erlst为列表,列表元素数据类型为整型,表示错误数据行对应的学生序号(例如第6行学生“戴*跃”的序号为5)。def check(dfs): erlst = [] for i in range(len(dfs)):xk_sum = 0 for j in dfs.columns[2:]: dyg = ①________ if dyg == 1: xk_sum += dyg if xk_sum != 3: erlst.append(②________)return erlstA.df1 = df[df['物理']==1] df1 = df1[df1['化学']==1]B.df1 = df[df['物理']==1] df1 = df[df['化学']==1]C.df1 = df[df['化学']==1] df1 = dfl[df1['物理']==1]D.df1 = df[df['化学']==1] df1 = df[df['物理']==1]②在程序划线处填入合适的代码。(3)用字典ans创建并转置的DataFrame对象如图c所示,绘制柱形图如图d所示。实现该功能的Python程序如下:import matplotlib.pyplot as pltadf = pd.DataFrame(ans,index= ['人数']).Tplt.bar(______)#设置绘图参数,代码略plt.show()程序的划线处应填入的正确代码为________(单选,填字母)。A.adf.人数,adf.班级 B.adf.班级,adf.人数C.adf.人数,adf.index D.adf.index,adf.人数答案 (1)①C ②i+1 (2)①AC ②len(df1)或 len(df1.index) (3)D解析 (1)①函数check检查选考科目数是否有误,变量i表示学生所在行索引,j表示列的名称,因此用变量dfs.at[i,j]表示某个单元格的名称。②函数返回错误数据行对应的学生序号,序号为行索引i加1。(2)①先筛选出选物理的学生记录,保存在对象df1中,再在df1中筛选出选化学的学生;或者先筛选出选化学的学生记录,再筛选出选物理的学生记录。②统计每个班级同时选报“物理”和“化学”学科的人数,而该人数就是对象df1的记录的数量len(df1)。(3)利用字典ans创建对象adf,字典的键为各个列标题的名称,值为每一行的记录值,该对象只有一行记录,且设置index为人数。转置是对行列发生变换,一共有10行,对应的属性是index,只有一列,列的标题是人数。2.学校暑期开展“青春迎亚运”活动,邀请高二学生每日参加运动锻炼并进行线上打卡。每周收集一次相关数据,分别保存在相应的xlsx文件中,部分文件如图a所示;每个文件记录了一周7天的打卡数据,示例如图b所示,其中运动时长单位:分钟。图b图a(3)统计某一周每班各学生的总运动时长后,比较得出该周每班最高的前两位时长,部分Python程序代码如下,请在划线处填入合适的代码。qp=[[0 for i in range(m)]for j in range(n)]'''定义数组qp记录每班各学生一周运动总时长,n为班级数,m为每班人数。其中qp[0][0]~qp[0][m-1]存储1班1号~m号同学的每周运动总时长,以此类推,qp[n-1][0]~qp[n-1][m-1]存储n班1号~m号同学的每周运动总时长。'''print(″本周每班最高的前两位时长分别为:″)i=0while i(4)统计某一周各运动项目的参与人次后绘制柱形图如图c所示,由图可知,该周参与人气最高的运动项目为______________。图c答案 (1)'班级' (2)D (3)①qp[cla-1][num-1]+=df['运动时长'][i] ②i==len(df)-1 ③k2=k1 (4)跑步解析 (1)题目要求按班级进行排序。(2)统计各运动项目参与人次用count函数。图表的x和y轴分别为运动项目和参与人次。(3)①从df中获取每位同学的数据。while循环遍历df中的每一位同学,num和cla对应该同学的班级和学号,则可对qp进行赋值,获取每位同学的运动时长。②最后一个班级的情况。条件i!=0 and df[″班级″][i]!=df[″班级″][i-1],表示找出两个不同的班级。若最后几位学生都在同一个班级,显示不满足条件df[″班级″][i]!=df[″班级″][i-1],那么最后一个班级的情况也要做出处理。③for循环对当前班级的学生进行遍历,选取最大的前两位时长,第一个判断语句qp[cla-1][j]>qp[cla-1][k1]时,则表示j学生的时长比之前的最大值大,则j同学变为新的最大值时长,k1同学变为新的第二大的时长。(4)略。3.为统计分析不同年级学生名字中的常用字,小王同学收集了本校所有学生的名字,并以入学年份为文件名分别保存在Excel文件中,文件如图a所示,每个文件包含了学生的年级、姓名和性别信息,如图b所示。编写Python程序。请回答下列问题:(2)小王想统计女生名字中出现最频繁的10个字,部分Python程序如下,请在划线处选择合适的代码。import pandas as pdxb=input(″请输入性别:″) #输入性别″女″nianji=[″2020级″,″2021级″,″2022级″]mzs=[] #存储姓名中的字for nj in nianji: mzs=mzs+getname(nj,xb)data={'字':mzs,'个数':[1]*len(mzs)}df1=pd.DataFrame(data)df2=df1.groupby(″字″,as_index=False).count() #统计每个字出现的次数df3=__________划线处应选择的代码是________(单选,填字母)。A.df2.sort_values(″个数″,ascending=True)[:10]B.df2.sort_values(″字″,ascending=False).tail(10)C.df2.sort_values(″字″,ascending=True).tail(10)D.df2.sort_values(″个数″,ascending=False).head(10)(3)将统计结果(10个最频繁的字)绘制成柱形图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltplt.title(xb +″生取名常用字″)plt.bar(df3.字,__________)plt.show()答案 (1)① df.at[i,″性别″]==xb 或 df[″性别″][i]==xb 或 df性别[i]==xb ②mz (2)D (3)df3.个数 或 df3[″个数″]解析 (1)①遍历学生名单每一行,取出当前行学生姓名,找出当前行中性别df.at[i,″性别″]等于性别xb的学生记录。②将符合条件学生名字中每个文字存储到列表mz,并返回列表。(2)利用字典data创建一个df1对象,该对象有“字”和“个数”两列,“字”列是提取的每个姓名中的字符,对应的数量均为1,按“字”分组并统计出现的次数,因此需按″个数″进行降序排列,并取出最大(最前面)的10条记录。(3)图表中横轴为出现的最常见的10个字,纵轴为每个字对应出现的次数。4.小明利用“在线社团报名系统”收集了全校学生的社团报名信息,并将报名数据导出到“社团报名.xlsx”中,如图a所示。然后编写Python程序对报名数据进行处理,生成分别以班级名和社团名为文件名的Excel文件,以便分发给相应的社团指导老师和班主任。图a图b(1)在对表格进行数据整理时发现,关于“Jacky.Y”同学的记录可能存在的数据问题是________(选填:A.数据缺失 B.数据异常 C.逻辑错误 D.数据格式不一致)。(2)其中生成每个社团名单文件的过程是:先对报名数据按社团名称进行分类,并对选报同一社团的学生按班级进行升序排序,然后生成各个社团名单文件,如图b所示。对应的程序代码如下,请在划线处填写合适的代码。import pandas as pddef read_file(filename): #读入报名数据的原始文件,并将表中的数据转换成列表,代码略def save_file(a): #保存名单到相应社团的Excel电子表格文件答案 (1)B (2)①a[0][2] 或 df.at[0,“选报社团”] 或 df[“选报社团”][0] ②num=rs[i][1] ③imax = imin ④save_file(a[s:s+num])解析 本题主要考查Pandas数据处理。(1)逻辑错误一般指违背事物的业务逻辑,不符合预期的值,显然不适用于本题中的数据情况。(2)①空根据形参a生成当前的文件名,文件名根据图2可知是a所属的社团名称。②空实现分组双向选择排序,是对num的初始化。变量num用于表示当前组的总人数。③空imax=imin是在特殊情况下的imax重定向。由于imin与前端left元素交换时并未考虑imax的取值,当恰好imax==left时,最大值提前交换到了imin处,因此需要重定向。④空则是对排序好的当前组内数据提交保存为excel文件,调用save_file函数,当前组有效数据为a[s: s + num]。4.小明利用“在线社团报名系统”收集了全校学生的社团报名信息,并将报名数据导出到“社团报名.xlsx”中,如图a所示。然后编写Python程序对报名数据进行处理,生成分别以班级名和社团名为文件名的Excel文件,以便分发给相应的社团指导老师和班主任。1.某单位根据全省各县市区的公共设施与服务运行情况,编制了“公共服务惠民指数”与“公共设施匹配指数”,现要对该两项指数进行分析。请回答下列问题:图a图b(1)该单位希望在所有县市区中,筛选出“公共服务惠民指数”低于75分的县市区,提出预警。各县市区的指数数据保存在DataFrame对象df中,如图a所示。实现上述功能的部分Python程序如下:df1 = df[df[″公共服务惠民指数″] < 75]print(″需要被预警的县市区个数为″,________,″个″)下列语句中,符合要求的为________。(单选,填字母)A.df1.count()B.len(df1)C.df1[″公共服务惠民指数″].sum()(2)根据图a中数据中的区域代码列的前4位,可以获取到该区域所属的地区,例如“3301”即代表“杭州市”。现需要根据该数据,匹配出各县市区所属的地区。实现上述功能的部分Python程序如下,请在程序中划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as pltarea = {″3301″:″杭州市″,″3302″:″宁波市″,......,″3311″:″丽水市″}df = pd.read_excel(″基层智治指数.xlsx″)df.insert(4,″地区″,″″) #在第4列插入“地区”列,值为空for i in df.index: areacode = str(df.at[i,″区域代码″]) df.at[i,″地区″]=________________df = df.drop(″区域代码″ ,axis= 1)②程序中的方框中应填入的正确代码为________(单选,填字母)。A.″公共服务惠民指数″, ascending = TrueB.″公共服务惠民指数″, ascending = FalseC.dfg[″公共服务惠民指数″], ascending = TrueD.dfg[″公共服务惠民指数″], ascending = False答案 (1)B (2)area[areacode[0:4]] (3)①mean() ②B解析 (1)A选项count函数统计记录的数量。B选项len(df1)是取得df1的行数。C选项对公共服务惠民指数这个列的数据求和。(2)根据第i行的区域代码列字符串中的前4位,在字典area中获取对应的地区名称,赋给第i行的地区列。(3)①根据地区分组统计多个列的平均值。②根据图中可知要对dfg的数据按公共服务惠民指数进行降序排序。2.某校高一学生的社团报名数据存储在“stbm.xlsx”文件中,如图a 所示。{'书画社':52,'动漫社':97,'摄影社':35,'汉学社':38,'法学社':51,'诗词社':37,'辩论社':43,'音乐社':63,'飞羽社':56,'魔方社':29}图c(1)统计各社团报名人数,找出报名人数最多的三个社团(不存在并列名次情况)并创建如图b所示的图表。实现上述功能的 Python 程序如下,请在划线处填入合适代码。import pandas as pdimport matplotlib.pyplot as plt#设置中文字体,代码略df=pd.read_excel(″stbm.xlsx″)df1=df.groupby(″①__________″,as_index=False).count()#删除df1的“班级”列,并将列标题“姓名”重命名为“人数”,保存修改结果,代码略df2=df1.sort_values(″人数″,ascending=False)df3=df2.②________plt.bar(df3.社团,③________)plt.title(″报名人数最多的前三个社团″)plt.show()#将各社团报名人数存入字典stdic并输出,结果如图c所示,代码略(2)受场地限制,每个社团开展活动人数上限为45人。解决方案:超过45人的社团分成若干班级,每班人数按一定规则分配。编程解决社团分班问题,并输出如图d所示分班方案,请在划线处填入合适代码。{'书画社':[26,26],'动漫社':[32,32,33],'摄影社':35,'汉学社':38,'法学社':[25,26],'诗词社':37,'辩论社':43,'音乐社':[31,32],'飞羽社':[28,28],'魔方社':29}图d(3)若“动漫社”实际报名人数为98人,则利用上述程序段进行分班后得到的结果为_______________________________________________________________(单选,填字母:A.'动漫社':[32,33,33]/B.'动漫社':[32,32,34])。答案 (1)①社团 ②head(3) ③df3.人数或 df3[″人数″] (2)x+stdic[i]%n或stdic[i]-(n-1)*x或stdic[i]-j*x或stdic[i]-sum(num) stdic[i]-len(num)*x或stdic[i]-(n-1)*num[0] (3)B解析 (1)统计各社团报名人数,需按社团进行分组统计。②找出报名人数最多的三个社团,用head函数获取前三条记录。③纵轴为排序后的社团人数。(2)当前社团人数stdic[i]大于45时,先确定班级数量n,再确定平均每班人数x,若是最后一个班级,则num中添加剩余人数stdic[i]-(n-1)*x。(3)报名人数为98人将分成3个班,根据x=stdic[i]∥n算计得到x的值为32,将剩余人数34添加到最后。3.小温对 5 个景区进行网络问卷调查,问卷中“环境”“硬件”“服务”和“交通”设置的选项及分值均一致,部分界面如图a所示。导出数据的部分界面如图b所示,其中数字对应问卷中每题的选项,如数字 i 代表该题的第 i个选项。请回答下列问题。(2)找出18~39 岁年龄段游客评分均值最高的景区,请在划线处填入合适的代码。jq=[″雁荡山″,″楠溪江″,″渔寮″,″南麂列岛″,″氡泉″]df1 = df[①________]df2 = df1.groupby(″景区″, as_ index=False)[″评分″].mean()df2 = df2.sort_values(″②________″, ascending=False)print(jq[df2[″景区″][0]-1])(3)根据上述 df2 中的评分数据, 绘制如图 c 所示的垂直柱形图, 代码如下:A.x=jqy=df2[″评分″]B.x=df2[″景区″]y=df2[″均差″]C.x=jq1y=df2[″均差″]答案 (1)C (2)①df[″年龄″]==2或者df.年龄==2; ②评分 (3)C解析 (1)统计每份问卷对应景区的评分,数字i代表该题的第i个选项,即数字1代表第1个选项,计2.5分,数字2代表第2个选项,计2分,以此类推。(2)①找出18~39岁年龄段游客评分均值最高的景区,18~39岁是第2个选项。②找出18~39岁年龄段游客评分均值最高的景区,需对df2中的评分进行降序排序。(3)A选项垂直柱形图横坐标景区的顺序和jq变量中景区的顺序不同。B选项柱形图横坐标为各景区的名字,而df2中景区一列为数字。4.张三同学收集了一个地区 8 月各类共享单车的骑行数据记录,每天的用户数据存储于“shared_bikes.xlsx”文件中,不考虑跨天数据。数据格式如图a所示,请回答下列问题:(2)统计本月各类型单车的每天平均骑行时长,并绘制柱形图,代码如下,绘制的图表如图b所示,请在划线处填入合适的代码。图b答案 (1)int(s[p+1:q]) * 60 (2)①df.index或range(len(df)) ②sm[j] += t ③avg (3)D解析 本题考查Pandas数据统计。(1)p记录空格位置,q记录冒号位置,而小时介于这两者之间。取出小时后转换为数字再乘以60。(2)①按行遍历整个df对象,行的数量为0至len(df)-1,也可以在index属性中取出。②变量j遍历bike列表索引位置,找到相同类型就保存对应的sm列表元素中。③最后统计各种类型的平均值avg,因此y轴保存avg值。(3)骑行次数应对分组后数据进行计数。课后练习5重难点1 利用Pandas批量处理文件重难点2 利用函数按列进行数据统计1.管理员从该停车系统中导出了 3 月份每天的停车记录,如图a 所示,每天的停车记录内容格式如图b 所示(进出标记为 0 表示驶入,1 表示驶出,停车记录已按进出时间升序排列)。图a车牌 进出时间 进出标记川B·8CC88 2023-3-23-06:09:56 0川A·A98A8 2023-3-23-06:28:04 0川C·9VV99 2023-3-23-06:56:45 0川B·8UU88 2023-3-23-07:01:29 0川C·9VV99 2023-3-23-07:48:01 1图b为统计停车场3月份每天的收入(只有驶入或驶出记录的车辆不参与计费),编写Python程序。(1)定义readdata函数,功能为:读取某一车牌车辆当天的进出时间记录,返回该车辆当天的停车总费用。参数 data 为该车牌当天的进出时间记录。函数代码如下,请回答下列问题:①程序段中加框处应填入的代码为________(单选,填字母)。A.data.进出标记[p]==0B.data.进出标记[p-1]==0 and data.进出标记[p]==1C.data.进出标记[p+1]==1D.data.进出标记[p]==0 and data.进出标记[p+1]==1(2)统计停车场 3 月份每天的收入并绘制柱形图,部分Python代码如下,请在划线处填入合适的代码。(3)已知每月分为3个时间段,1-10日称为上旬,11-20日称为中旬,21-30(31)日称为下旬。则由图c可知,该停车场3月份________(选填:上旬/中旬/下旬)收入总和最高。答案 (1)①D ②p+=1或p=p+1(2)①dic[i]=0 ②df_g[k]>1 (3)下旬解析 (1)①遍历数据data,进出标记为 0 表示驶入,1 表示驶出,先有驶入,再有驶出。②处理下一条记录。(2)①语句dic[i]+=readdata(data)将计算每天的费用,因此需对dic[i]赋值为0。②df_g是按车牌进行分组记录数量,只有一条驶入或驶出记录的车辆不参与计费,即df_g[k]的值大于1。(3)略。2.小明为了研究某地近十年每月的温差变化,编写Python程序。以2023年4月为例,该月每天的温度数据分别保存在以8位日期字符串命名的excel文件中,部分文件如图a所示,每个文件记录了一天24小时的温度数据,如图b记录了4月28日的数据。图a图b(2)定义find函数,功能为:用字典创建DataFrame对象,并筛选出4月份温差大于13的日期,输出结果如图c所示,请在划线处填入代码。 日期 温差3 0404 13.19 0410 13.115 0416 13.317 0418 13.827 0428 15.5图cdef find(r,t): dic={″日期″:r,″温差″:t} df1=pd.DataFrame(dic) df2=______________ return df2(3)绘制4月份每天的温差柱形图,部分Python程序如下,请在划线处填写合适的代码。答案 (1)C (2)df1[df1.温差>13]或df1[df1[″温差″]>13] (3)①i+1 ②dv(dayfile) ③td解析 (1)df[″温度″].max()表示当天最高温度,df[″温度″].min()为最低温度。(2)对温差进行筛选。(3)①变量i的值为0至29,而日期为1号至30号。②调用dv函数求每天的温差。③y轴为温差td。3.小美收集了某电商平台某年1-12月的“十大”空调品牌的销售数据,每个月的数据保存在一个csv文件中,文件如图b所示,分别记录了对应月份的订单数据。请回答下列问题:(1)定义get_sales函数,功能为:读取某月的csv文件,返回某品牌当月的销售额。函数代码如下,划线处应填入的代码为:________(单选,填字母)。A.df[df['品牌'] == brand] B.df[df['品牌'] == month]C.df['品牌'] == brand D.df['品牌'] == monthimport pandas as pddef get_sales(brand, month): filename = str(month) + '.csv' df = pd.read_csv(filename) #读取文件 df =________ sales = (df['数量'] * df['单价']).sum() #求出df中所有数量*单价的总和return sales(2)统计十大品牌全年销售额,并找出销售额最大的品牌,绘制该品牌的1-12月销售额的线形图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltbrand_dict={'格力':0,'美的':0,'海尔':0,'奥克斯':0,'海信':0,'三菱重工':0,'日立':0,'华菱':0,'TCL':0,'大金':0}x,y = [],[]plt.show() #生成线形图如图c所示图c(3)由图c可知,该空调销售额增量最大的月份是________。答案 (1)①A (2)①get_sales(j,i) ②brandmax = i ③i (3)11解析 本题考查Pandas数据处理。(1)①get_sales函数读取某月的csv文件,返回某品牌当月的销售额,函数两个参数:month为月份,brand应为品牌。(2)①brand_dict字典用于统计每种品牌的全年销售额,外循环i遍历月份,内循环j遍历品牌名称,此处可利用自定义函数来累加该品牌每月销售额。②处求所有品牌全年销售额的最大值max_sales和最大值的品牌名称brandmax。(3)略。4. 一球迷收集了近3个赛季的CBA比赛数据,每个赛季的数据分别保存在独立文件中,如图a所示,文件中数据记录格式如图b所示,以球员“布莱克尼”的“二分”数据“7.9-16.3”为例,7.9表示二分球平均命中数量,16.3表示二分球平均投篮次数。图c该球迷想根据历史赛季数据预测各球队下个赛季的首发阵容,编写了如下Python程序,请回答下列问题:(1)定义readData函数,功能为:读取某赛季的excel文件,返回每个队员的得分(得分=二分球命中数量*2+三分球命中数量*3+罚球命中数量。函数代码如下,划线处应填入的代码为________(单选,填字母)。A.df[″得分″][i]+=n*cols[col]B.df[″得分″][i]=n*cols[co1]C.df[″得分″]+=n*cols[col]D.df[″得分″]=df.二分*2+df.三分*3+df.罚球import pandas as pddef readData(file):答案 (1)A (2)①seasons[1:] ②df[df.球队==team] ③n=teams[team](3) members[n*2], members[2*n+1]解析 本题考查Pandas数据处理和可视化。(1)遍历每位队员的二分、三分和罚球的平均命中数量,根据公式求队员的3种投篮得分之和。col是字典中的键(二分、三分和罚球),cols[col]是投篮得分,df[col]表示二分等某列值数据,p是第i位球员命中数量和投篮次数分隔位置,因此n*cols[col]的乘积之和该球员总得分。(2)①seasons列表中存储了3场比赛的文件名,将这3个文件合并为一个文件。语句df=readData(seasons[0]+″.x1sx″)已经读取第1个文件,需对剩余的文件进行合并。②筛选各球队得分最高的5名球员作为首发阵容。teams是字典变量,键是球队名称,对每个球队进行遍历,筛选出该队全部队员,找出在3场比较得分和最高5名球员。③取出球队编号,将每个球队的球员姓名和得分存储到members对应的数组元素中。teams字典值为球队的编号,members中元素个数为len(teams)*2,n号球队各球员名字存入members[2*n]中,得分存入members[2*n+1]中。5.李老师收集了 2022 级学生“七选三” 选课意愿数据,每个班的数据分别保存以'xk'+班级为命名的 xlsx 文件中,如图a所示,每个文件记录了该班每位学生的选考科目选课情况,如图b所示。(2)统计“技术”选课人数占总人数的比例,并作出各个科目选课人数的柱形图。程序代码如下,请在划线处填入合适的代码。图c答案 (1)① i<10或者i<=9 ② data (i)(2)①km[j]+=1 ②km['技术']/len(df)③df_km['科目'] (3)物理、化学、地理(不分顺序)解析 本题考查Pandas与Matplotlab模块相关知识。(1)①空在班号前补0,当i值介于1-9之间时需要补0。②函数data功能代入班号,生成班级文件名,用pd_read将对应文件转换为dataframe对象返回。(2)①遍历学生所选学科,统计各科选课人数,以科目为键将结果存入字典km。②空统计技术选考人数占总人数的比例,而总人数可以通过len(df)得到。③观察图表x轴数据为科目。(3)略。6.某同学收集了部分城市2022年4月每天24小时空气质量数据,按日分别保存在csv文件中,部分文件如图a所示。数据格式如图b所示。请回答下列问题:图a图b(1)定义函数 avg,功能是读取某天的数据文件,计算该天空气质量指数(AQI) 的平均值并返回,代码如下。请在划线①处应填入合适的代码。def avg(filename): df=pd.read_csv(filename) df1=df[df.columns[2:]] #取类型及其后的所有列 g=df1.groupby(①________,as_index=False).mean() return ②________划线②处应填入的代码为________(单选,填字母)。A.df[df.类型=='AQI'] B.df1.AQI C.g.AQI D.g[g.类型=='AQI'](2)统计本月各城市空气质量最长连续优、良的天数(按照环境空气质量标准,空气污染指数 AQI≤50为优级,AQI≤100 为良好),代码如下,绘制的图表如图 c 所示。请在划线处填入合适的代码。图cimport pandas as pdimport matplot1ib.pyplot as pltn=10 #城市个数count=[0]*ndaymax=[0]*nfor i in range(1, 31):答案 (1)①'类型' ② D (2)①count[j]+=1 ②daymax[k]=count [k] ③city解析 本题考查Pandas及数据处理相关知识。(1)函数要求计算该天空气质量指数(AQI)的平均值,故应按“类型”分组并求平均,返回AQI的平均值,②中需筛选出类型是AQI的记录。(2)①处统计连续优、良的天数,当dayaqi.at[0,t]<=100时,该城市计数器加1,填count[j]+=1。②处求count[k]的最大值,填daymax[k]=count[k]从题c的图表可以看出,x轴数据为城市名称,从city=dayaqi.columns[1:n+1]可以看出,city是城市名称列表。1.某竞赛获奖名单已公布,现要对获奖情况进行数据处理和分析。请回答下列问题:图a 图b (1)将获奖名单读取到DataFrame对象df中,如图a所示,若要编写Pandas程序分析出浙江省内获得满分400分的总人数。下列方法正确的是________(单选,填字母)。A.从df中筛选出省份为“浙江”的数据df1,再从df1中筛选出总分为“400”的数据df2,最后对df2中的“姓名”数据列使用count()函数统计出总人数B.对df中数据按“总分”降序排列并保存到df1中,再从df1中筛选出省份为“浙江”的数据df2,最后对df2中的“姓名”数据列使用sum()函数统计出总人数C.对df中数据按“总分”为关键字进行分组,并使用count()函数统计出总人数,得到数据df1,再从df1中筛选出省份为“浙江”的总人数(3)获奖名单新增“获奖等级”数据列,存储在文件“data.xlsx”,如图c所示,小陆想分析出一等奖获奖人数最多的前5个省份(没有并列情况),并绘制如图d所示的柱形图,实现该功能的部分Python程序如下。图c图dimport pandas as pdimport matplotlib.pyplot as pltplt.rcParams[″font.sans-serif″] =[″SimHei″] #设置图表显示中文字体df = pd.read_excel(″data.xlsx″)df1 =①________ #选取相应的一等奖数据df2 = df1.groupby(″省份″).count() #分组统计总人数df2.rename(columns = {″姓名″:″获奖人数″}, inplace = True) #更改列标题名称g = df2.sort_values(″获奖人数″, ascending = False).head(5)plt.title(″一等奖获奖人数最多的前 5 个省份″)plt.bar( ②________ ) #绘制柱形图plt.ylabel(″获奖人数″)plt.show()①请在程序中划线处填入合适的代码。②程序的划线处中应填入的正确代码为________(单选,填字母)。A.g.省份,g.获奖人数 B.df2[″省份″],df2[″获奖人数″]C.g.index,g.获奖人数 D.df2.index,df2.获奖人数答案 (1)A (2)①lst[i][2]>=h ②dic[city]=lst[i][1] (3)①df[df.获奖等级==″一等奖″] 或 df[df[″获奖等级″]==″一等奖″] ②C解析 (1)B选项姓名列是字符串类型,不能进行sum求和。C选项不能按总分进行分组。(2)①找出一等奖的条件是lst[i][2] >= h。②不在字典中,新建一个以city为名的新键值对。(3)略。2.为了督促学生寒假坚持体育锻炼,老师采用线上打卡的方式收集学生锻炼情况,数据如图a所示。图a图b为统计冬锻完成情况,编写 Python 程序。请回答下列问题:(1)定义outdata函数,其中参数dftmp是DataFrame数据类型,数据由图a所示的Excel表导入。函数功能是:统计每天每个学生的锻炼项目个数,返回含有“学籍号”、“姓名”和“项目个数”信息的二维列表。函数代码如下,划线处应填入的代码为________(多选,填字母)。A.dftmp.at[i,j]==″√″ B.dftmp[i][j]==″√″C.dftmp.at[j,i]==″√″ D.dftmp[j][i]==″√″def outdata(dftmp): a=[] for i in dftmp.index: #dftmp 的行索引(2)冬锻打卡成功的标准为累计运动 15 天,每天锻炼项目达到 3 项及以上。统计输出寒假体育锻炼达标的学生名单,并制作四个项目的运动次数对比图,部分界面如图b和图c所示。部分Python程序如下,请在划线处填写合适的代码。图c答案 (1)AD (2)①days=1 ②i+=1③yd1[4:]或yd1.values[4:](3)not flag[i] and lst[i][2]>=3解析 (1)变量i为行索引,变量j为列标题,可以用字典法,也可以用at函数来表示某个单元格名单。(2)①对days初始化为1。②遍历下一条记录。③前4列依次为日期、学籍号、姓名和性别,从第列开始统计的是项目的次数。(3)每天锻炼项目达到 3 项及以上,即第1次达到后就是达标,以后的表示已经达标,因此和flag[i]的状态有关。3.小帅收集了2023年的销售数据并存储在″超市销售数据.csv″文件中,部分数据如图a所示。分析某月的销售情况,柱形图如图b所示。部分Python程序如下:顾客编号,大类名称,销售日期,小类名称,商品类型,单位,销售数量,商品单位,销售金额5,粮油,20230101,番茄酱,一般商品,瓶,1,6.7,6.710,日配,20230101,冷藏果粒酸乳,一般商品,盒,1,8.9,5.926,冲调,20230101,麦片/粉,一般商品,袋,1,27.7,27.731,洗化,20230101,洗衣皂,一般商品,块,1,4.9,4.931,洗化,20230101,软抽纸巾,一般商品,提,1,9.7,6.949,蔬果,20230101,花果,生鲜,千克,0.902,9.96,8.988,日配,20230101,利乐砖纯奶,一般商品,提,1,65,4915,家居,胶棉拖把,一般商品,把,1,70,7050,休闲,20230101,软糖,一般商品,袋,1,10.9,10.91,蔬果,20230101,芽菜,生鲜,千克,0.456,2.78,1.275,蔬果,20230101,鲜调味,生鲜,千克,0.24,9.6,2.32,洗化,20230101,无芯纸,一般商品,提,1,24.9,18.99,休闲,20230101,趣味/休闲,一般商品,盒,1,6.9,6.946,蔬果,20230101,苹果类,生鲜,千克,1.776,4.98,8.84图a图b请回答下列问题:(1)为提取“销售日期”中月份数据,划线处应填入的代码是________(单选,填字母)。A.df.index B.df.values C.df.columns(2)请在程序中划线①②处填入合适的代码。(3) 加框处实现按“销售金额”降序排列后取前10项,下列代码中能正确实现的有________(多选,填字母)。(注:全部选对的得2分,选对但不全的得1分,不选或有选错的得0分)A.g.sort_values(″销售金额″,ascending=False).tail(10)B.g.sort_values(″销售金额″,ascending=False).head(10)C.g.sort_values(″销售金额″,ascending=True)[:11]D.g.sort_values(″销售金额″,ascending=False)[:10]答案 (1)A (2)①df.月份==month或df[″月份″]==month ②g.销售金额或g[″销售金额″] (3)BD解析 (1)表达式df.at[i,″销售日期″]中,变量i表示记录的行索引,因此需遍历df的行索引集合。(2)①输入需查询的月份month,筛选月份数据的条件是月份列中值为month。②图表的纵坐标为销售金额。(3)按“销售金额”降序排列后取前10项,可以采用head函数,也可以采用切片,但切片时得到的是前闭后开的区间。4.小陈在气象部门得到了一份2022年不同城市的月平均日照时数(单位:kW·h/m2/day)数据,存放在Excel文件“日照.xlsx”中。部分界面如图所示。图a(2)第2步,仅考虑平均日照时数因素,选出最适合用光伏发电给智能农业大棚提供能源的十个城市。划线处应填入的代码为________(单选,填字母)。df=________A.df.sort_values(″城市名″,ascending=False).head(10)B.df.sort_values(″城市名″).tail(10)C.df.sort_values(″年度平均″,ascending=False)[:10]D.df.sort_values(″年度平均″,ascending=False).tail(10)#输出结果如图b所示,代码略年度平均最高的10个城市为:日喀则地区 5.83阿里地区 5.66三沙市 5.57山南地区 5.53拉萨市 5.53那曲地区 5.11昌都地区 4.91海西蒙古族藏族自治州 4.88和田地区 4.84攀枝花市 4.83图b(3)小陈想在家乡温州建一个智能大棚,采用光伏发电加蓄电设备供电,面积为1平方米的光伏板容量约为0.3 kW/块,光伏的充放电效率为80%,大棚每天消耗的最低电能约为30 kW·h,为确保每月能正常供电,需要1平方米的光伏发电板共①________块。(日均发电量=电池板的容量/块×块数×平均日照时数×充放电效率)建设光伏发电设备前要先获得当地的平均日照时数情况,小陈通过如下代码获取相关数据。程序运行界面如图c所示:图cres=df[df[″城市名″]==″温州市″]res=res.values[0][1:13].②________print(″温州市月平均日照最小值为”,res)答案 (1)计算每个城市的年度平均日照时数 (2)C (3)①52 ②min()解析 本题考查Pandas相关操作及其应用。(1)mdays列表中存放每个月的天数,Excel表格中存放的是每个月的月平均日照时数,通过for循环将月平均日照时数*每个月的天数并进行累加,得到全年的日照时数,再计算出当前城市的日平均日照时数,并通过round函数保留2位小数。故该程序功能为计算每个城市的年度平均日照时数。(2)最适合用光伏发电的十个城市即日照时数最长的十个城市,通过sort_vlaues进行降序排序,取前十个。(3)根据图c可知温州市月平均日照最小值为2.42,再根据公式:日均发电量=电池板的容量/块×块数×平均日照时数×充放电效率。0.3 kW/块*块数*2.42*0.8=30 kW,得到需要的光伏发电板共52块。②处使用min()函数求最小值。5.小周要统计高二年级各班的行为规范得分情况,部分扣分数据如图a所示。图a(1)观察数据,发现存在重复扣分的记录,如图a第2、3行所示。现需对数据进行整理,以下操作合理的是____(单选,填字母)。A.对班级、记录员均相同的记录去重B.对日期、关联学生、项目名称均相同的记录去重C.对关联学生、项目名称、项目扣分均相同的记录去重(3)该校高二年级共有16个班级,统计各班的行为规范得分(班级行为规范得分=100分-本班所有学生扣分),并绘制如图b所示的柱形图,实现该功能的部分Python程序如下,请在划线处填入合适的代码。图b答案 (1)B (2)①df[″关联学生″][i]或df.关联学生[i]或df.at[i,″关联学生″] ②t=j+1 (3)①班级 ②cla解析 (1)日期、关联学生、项目名称都相同,那么这两条记录是重复。(2)①索引为i的“关联学生”列的名称为df[″关联学生″][i]。②从表达式s[t:j]来看,变量t的表示一位学生的开始索引位置,若当前位置的值为引号,则下一位学生的索引位置从j+1开始。(3)①计算每个班级的得分,因此须按班级进行分组统计。②列表cla中存储每个班级的得分。6.某中学“7选3”选考科目的选科数据存储在Excel文件“选科数据.xlsx”中,部分数据及格式如图a所示。图中“1”表示选择该科目为选考科目。现对数据进行统计分析,编写Python程序,请回答下列问题。图a(2)统计7选3各科的选报人数,输出各科的选报情况及开班情况,如图b所示。部分程序代码如下,请在划线处填入合适的代码。物理 人数:398 班级数:10化学 人数:408 班级数:11生物 人数:133 班级数:4政治 人数:261 班级数:7历史 人数:244 班级数:7地理 人数:361 班级数:10技术 人数:136 班级数:4图bimport pandas as pddf=pd.read_excel(″选科数据.xlsx″)km=[″物理″,″化学″,″生物″,″政治″,″历史″,″地理″,″技术″]m=40 #每个班的最多人数,班额bj=[0]*7xkrs=[0]*7 #存储选考科目的选报人数p=0for j in km: ①________ for i in range(len(df)): if df.at[i,j]==1: cnt+=1 ②________ bj[p]=fenban(cnt,m)p=p+1for i in range(7): print(km[i],″人数:″,xkrs[i],″班级数:″,bj[i])(3)绘制选考科目选科人数情况的柱形图,部分Python程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltx=kmy=__________________plt.bar(x,y)#绘制柱形图#设置绘图参数,显示如图c所示柱形图,代码略图c(4)下列程序能实现按班级统计各班选报技术学科人数的是________(单选,填字母)。A.jsrs_bj=df.groupby(″班级″).″技术″.count()B.jsrs_bj=df.sort_values(″班级″).count()C.jsrs_bj=df.groupby(″班级″)[″技术″].count()D.jsrs_bj=df.groupby(″班级″).技术.mean()答案 (1)allrs%maxbrs!=0或allrs%maxbrs>0或bjnum*maxbrs解析 (1)当选报总人数allrs是每班最多人数maxbrs的倍数时,开设的班级数为bjnum,否则需要再增加一个班级 。(2)对变量cnt赋初值0。②统计当前学科的选报人数,因此代码为 xkrs[p],也可以写为xkrs[km.index(j)]。(3)图表的纵坐标数据为各科的选科人数xkrs。(4)略。7.第19届杭州亚运会已完美落幕,亚运会赛事以“杭州为主,全省共享”的原则分布在杭州、宁波、温州、湖州、绍兴、金华各地。大会共有40个大项,61个分项,最终诞生了481块金牌。小李作为一名体育爱好者想重温大会赛程安排,他从杭州亚运会的官网上采集了相关数据,整理后存储在“杭州第19届亚运会总赛程.xlsx”文件中。如图a所示(0表示有赛事但不产生金牌,其他数字表示当天产生的金牌数)。图a为了更清楚地了解相关赛事信息,小李编写了Python程序,请回答以下问题。(1)足球是小李最关注的大项,为了解足球的赛程安排,划线处应填入的代码为________(单选,填字母)A.df.大项==″足球″ B.df[″大项″==″足球″]C.df[df.大项==″足球″] D.df[df[″大项″]==足球]import pandas as pddf=pd.read_excel(″杭州第 19 届亚运会总赛程.xlsx″)df2=________print(df2)(2)足球项目的比赛分布在杭州等城市的八个场馆,了解各个场馆举办足球赛事的具体场次,找到连续举办足球赛事最多的场馆,如图b所示。程序代码如下,请在划线处填入合适的代码。黄龙体育中心体育场 [9/19, 9/21, 9/24, 9/27, 9/28, 10/1, 10/4, 10/6, 10/7]临平体育中心体育场 [9/19, 9/21, 9/22, 9/24, 9/25, 9/28, 9/30, 10/3]上城体育中心体育场 [9/20, 9/22, 9/24, 9/25, 9/27, 9/28, 10/1, 10/3, 10/7]萧山体育中心体育场 [9/19, 9/20, 9/21, 9/22, 9/24, 9/25, 9/27, 9/28, 10/1, 10/4]金华体育中心体育场 [9/19, 9/21, 9/24, 9/27]浙江师范大学东体育场 [9/19, 9/21, 9/24, 9/27]温州奥体中心体育场 [9/21, 9/22, 9/24, 9/25, 9/27, 9/28, 9/30]温州体育中心体育场 [9/22, 9/24, 9/25, 9/27, 9/28, 9/30]连续举办足球赛事最多的场馆:萧山体育中心体育场图b(3)足球在亚运会期间总共产生两枚金牌,统计分析其他大项产生的金牌总数,找出产生金牌总数最多的十个大项,并绘制图形如图c所示。程序代码如下,请在划线处填入合适的代码。图cimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['simhei'] #图表中文标签显示为黑体grp=df.groupby(①________ , as_index=False).金牌总数.sum()grp=grp.sort_values(″金牌总数″,ascending=False).②________x=grp.大项y=grp.金牌总数#设置图表参数,代码略。答案 (1)C (2)①dic[sta].append(j)或 dic[sta]+=[j] ②c=0 ③maxsta(3)①″大项″ ②head(10)解析 (1)了解足球的赛程安排需符合″大项″列中值为″足球″的记录。(2)①遍历每行的第3列到倒数第4列,若这些单元格中值为0或1,表示该天举办足球赛事,将当天日期j添加到字典dic以场馆名称sta为键的值中。②统计连续举办足球赛事最多的场馆,若当天没有赛事,则将连续天数s的值置为0。③连续举办足球赛事最多的场馆名称保存在变量maxstak。(3)①统计分析其他大项产生的金牌总数,需按大项进行分类统计。②grp对象的sort_values方法是按金牌进行降序排列,找出产生金牌总数最多的十个大项,因此需用head函数。 展开更多...... 收起↑ 资源列表 专题9 pandas数据统计 学案(含解析).docx 专题9 pandas数据统计.pptx