资源简介 课时3 利用Pandas模块处理数据课时目标1.掌握Pandas模块的两种数据结构Series和DataFrame。2.学习使用Pandas模块对数据进行编辑、计算、统计、分析。3.会使用Python进行简单数据处理,并能从其中提取有用信息形成结论。1.常用的Python扩展模块有Numpy、Scipy、Pandas和Matplotlib等,Pandas模块主要用于数据的处理和分析。2.Python中引入Pandas模块的方法:import pandas as pd,pd是用户为导入模块取的别名。3.pandas提供了Series和DataFrame两种数据结构。(1)Series(系列)①Series是一种一维的数据结构,包含一个数组的数据和一个与数据关联的索引(index),索引值默认是从0起递增的整数,数据可以是不同类型的元素。列表、字典等可以用来创建Series数据结构。②Series对象属性属性 说明index Series的下标索引,其值默认是从0起递增的整数,也可以指定为字符串型values 存放Series值的一个数组(2)DataFrame(数据框)①DataFrame是一种二维的数据结构,由1个索引列(index)和若干个数据列组成,每个数据列可以是不同的类型。DataFrame可以看作是共享同一个index的Series的集合。创建DataFrame对象的方法很多,通常用一个相等长度的列表或字典来创建。②DataFrame常用对象属性属性 说明index DataFrame的行索引columns 存放各列的标题values 存放二维数据的值T 行列转置4.数据可视化是将数据以图形图像等形式表示,直接呈现数据中蕴含信息的处理过程。5.matplotlib绘图(1)matplotlib是一个绘图库,使用其中的pyplot子库提供的函数可以快速绘图和设置图表的坐标轴、坐标轴刻度、图例等。(2)引入matplotlib的pyplot子库的方法为:import matplotlib.pyplot as plt。 6.可视化的作用快捷观察与追踪数据、实时分析数据、增强数据的解释力与吸引力等。7.数据以可视化方式展现出来,用户可以通过直观、交互的方式浏览和观察数据,发现数据中隐藏的特征、关系和模式。如“百度地图”“百度指数”“航班飞行实时跟踪地图”等。8.可视化的工具(1)常见的数据分析中一般包含创建可视化图表功能,主要用于数据可视化的工具有大数据魔镜、Gephi、Tableanu等。(2)使用Python、R等计算机语言编写程序实现数据的可视化。(3)可视化工具库,如基于JavaScript的D3.js、Highcharts、GooleCharts等,基于Python的matplotlib等。9.可视化的典型案例数据以可视化方式展现出来,用户可以通过直观、交互的方式浏览和观察数据,发现数据中隐藏的特征、关系和模式,如“风、气象、海洋状况的全球地图”、“百度地图”、“百度指数”、“编程语言之间的影响力关系图”、“航班飞行实时跟踪地图”、“微博热词趋势图”等。重难点剖析1.Pandas模块中的Series对象(1)创建Seriesimport pandas as pds1=pd.Series([1,2,3,4])s2=pd.Series([1,2,3,4],index=["a","b","c","d"])(2)Series对象的检索和修改输出索引值为0的值:print(s1[0])输出索引值为"b"的值:print(s2["b"])输出values小于3的值:print(s1[s1<3])修改索引值为1的值为10:s1[1]=102.Pandas模块中DataFrame对象(1)创建DataFrame对象①使用一个相等长度的列表或字典创建DataFrame对象。如x=pd.DataFrame({"x1":[1,2,3,4],"x2":[5,6,7,8],"x3":[9,10,11,12]})②导入二维数据文件创建DataFrame对象。pd.read_excel(filename) #从Excel文件导入数据pd.read_csv(filename) #从CSV文件导入数据③DataFrame对象导出到二维数据文件df.to_excel(filename) #导出数据到Excel文件df.to_csv(filename) #导出数据到CSV文件(2)查看DataFrame对象通过index、columns、values属性可以查看DataFrame对象的行索引、列索引及数据,如:df.index、df.columns、df.values。查看数据列:通过字典记法或属性检索DataFrame对象中的一列数据,如:df['id']或df.id。查看数据行:通过head()、tail()返回DataFrame的前n行、后n行数据;通过索引查看指定行,如:df[2:5],返回df对象中第2、3、4行数据;通过布尔型数据选取满足条件的行。如:df[df["age"]>=18]。使用at[]方法可以根据行标签和列标签选取单个值,如:df.at[0,"姓名"]。(3)DataFrame对象中行、列的编辑可以通过insert()、drop()、rename()、append()、set_value()等函数进行DataFrame对象中行、列的编辑。(4)DataFrame对象中数据的统计与计算可以使用count()、sum()、mean()、max()、min()、describe()、groupby()等函数对DataFrame对象中的数据进行统计与计算。(5)DataFrame对象中数据的排序按索引排序可以使用sort_index()函数;按值排序可以使用sort_values()函数。通过选项axis=0/1确定排序的轴向,axis默认值为0,纵向排序。通过选项ascending=True/False确定升/降序,ascending默认值为True,升序排序;排序结果返回一个新DataFrame对象。 例1 小原爸爸负责接小原放学,一段时间内,他爸爸将每天接他时的堵车时间和天气情况记录在文件“data.xlsx”中,其中堵车时间的单位为分钟,如图 a 所示,并通过 Python 语言编程制作的图表如图 b 所示。(1)通过对图 b 的分析可知,天气情况与堵车时间 (单选,填字母:A.有/B.没有)一定的关系。 (2)部分程序代码如下,请在划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签df=pd.read_excel("data.xlsx") #读取 Excel 文件中的数据df=df.groupby("天气情况", as_index = False). ① #按“天气情况”分组求平均数 df=df.sort_values(" ② ",ascending= False) x=③ y=df["堵车时间"]plt.title("不同天气情况的平均堵车时间分析") #设置图表标题plt.bar(x, y) #绘制柱形图plt.show()答案 (1)A (2)①mean() ②堵车时间③df["天气情况"]或df.天气情况解析 本题考查利用Pandas模块统计数据和利用pyplot绘制图像相关操作。(1)从题图 b 可以看出,最堵的时间与天气及雨势大小相关。(2)①分组后用mean求平均数。②降序排序的参数为 ascending=False。从题图b中可以得知为按堵车时间降序排列。(3)题图 b的x 轴数据为“天气情况” ,而 df 已按“天气情况”进行了分组。变式训练1 某学校运动会高一年级各个选手得分情况存储在“运动会得分.xlsx”数据文件中(如图a所示),现准备利用Python程序对这些数据进行统计分析并可视化,请根据要求回答下列问题(注: 已对重名做技术处理)。(1)文件“运动会得分.xlsx”中的数据是 (选填:结构化数据/半结构化数据/非结构化数据)。 (2)编写如下Python程序,统计各班总分,并建立图b所示图表:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel("运动会得分.xlsx")#统计各班总得分情况,并建立图表,如图b所示df1=df1.sort_values("班级",ascending=True)#按班级升序排列df1=df.groupby(① ,as_index=False).② #统计各班总得分 plt.title("高一年级各班总分汇总图") #添加图表标题plt.bar(df1["班级"],③ ) plt.show()#输出本年级最具价值运动员,最具价值运动员是本年级中得分最高的运动员,图c所示df3=df.groupby("姓名",as_index=False).得分.sum()maxdf=df3.得分.max()print("最具价值运动员:")print(④ ) 答案 (1)结构化数据 (2)①"班级" ②sum() ③df1["得分"]或df1.得分 ④df3[df3["得分"]==maxdf]或df3[df3["得分"]>=maxdf]解析 本题考查利用Pandas模块统计数据和利用pyplot绘制图像相关操作。(1)Excel文件按行按列存储数据,属于结构化数据。(2)统计各班总得分,需按班级进行分组,并对每个班级得分进行求和操作。因此①为班级,②为sum()函数进行求和。③图表纵轴为每个总分之和,因此③为df1对象中的得分列。④最具价值运动员可能有多名,因此应筛选出得分大于或等于最高分的记录。例2 2023 年女足世界杯小组赛晋级规则为:32 支参赛队伍通过抽签分为八个小组,每个小组分别有四支球队进行比赛,胜平负分别积 3 分、1 分、0 分。每个小组积分的前两名球队晋级,积分相同的净胜球多的球队晋级,净胜球相同的进球数多的球队晋级。小组赛数据存放在“女足世界杯小组赛积分.xlsx”文件中,如图 a 所示。现用 Python 程序对表中数据进行处理,得到 16 支晋级球队名单,并输出如图 b 所示的图表。(1)定义 tj 函数,功能为:使用 Pandas 读取文件数据,计算每支球队的积分,并返回一个 Dataframe 对象。实现相应功能的 Python 函数代码如下,划线处应填入的代码为 。 import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']#显示中文def tj(filename): #filename 为 excel 文件名称 df=pd.read_excel(filename) for i in df.index: df.at[i,"积分"]= return df(2)定义jsq函数,将Dataframe对象df中的“进失比”列(如数据"8比1",8为进球数,1为失球数,净胜球数为7)求出各球队的净胜球、进球数。划线处应填入的代码为 。 def jsq(df): for i in df.index: a,b=map(int,df.at[i,"进失比"].split("比")) #8比1,则a=8,b=1 df.at[i,"进球数"]=a return df (3)为了求出八个小组中晋级名单,按照小组A~H、积分由高到低的顺序,绘制图表如图b所示。实现相应功能的代码如下:filename="女足世界杯小组赛积分.xlsx"df=tj(filename)df=① #以“小组”为主要关键字升序,“积分”“净胜球”“进球数”为次要关键字降序排列df=df.sort_values(["小组",'积分', "净胜球" ,'进球'],ascending=[② ,False,False,False]) #按小组分组并取出每组前 2 队数据 df1=df.groupby(③ ,as_index=False).head(2) plt.bar(④ ) #绘制如图 b 所示图表 plt.title('2023 女足世界杯 16 强球队')#设置图表格式,代码略plt.show()答案 (1)df.at[i,"胜"] * 3 + df.at[i,"平"](2)df.at[i,"净胜球"] = a - b (3)①jsq(df) ②True ③"小组" ④df1["球队"],df1["积分"]解析 本题考查利用Pandas进行数据统计的相关知识。(1)计算每支球队的积分。胜平负分别积 3 分、1 分、0 分,因此每个单元格的计算公式为df.at[i,"胜"] * 3 + df.at[i,"平"]。(2)计算各球队净胜球,变量a表示进球数,变量b表示失球数,净胜球的值为a-b数。(3)①调用jsq函数,计算df中的“进失比”列。②以“小组”为主要关键字升序,升序的ascending值为True。③绘制各个小组的积分情况,因此需按小组进行分组并取出每组前2 队数据。④图表横轴为各小组前2名df1["球队"],纵轴为各小组对应的积分df1["积分"]。变式训练2 张三同学收集了一个地区 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 所示,请在划线处填入合适的代码。import 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).用户编号.sum()答案 (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)骑行次数应对分组后数据进行计数。例3 小红收集了部分城市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 pltdef 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月平均浓度超过年平均浓度的月份共 个。 答案 (1)D (2)①mdays[m] ②sm += sd③pm (3)5解析 (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月。变式训练3 小林收集了各地市各年份检测的 PM2.5 浓度值保存于 Excel 文件“PM2.5.xlsx”中,部分数据如图 a 所示。小林使用Python 进行数据分析,请回答以下问题。(1)小林先将同一个地区的数据输出到各自独立的 Excel 文件中,部分结果如图 b 所示,实现程序如下所示:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel("PM2.5.xlsx")#cities 保存所有地区名称,这里仅演示部分数据cities=["安吉县", "淳安县", "慈溪市", "杭州市", "湖州市"]for city in cities: dfc= dfc.to_excel(city + ".xlsx", index=False) # 输出文件结果示例如图 b 所示那么划线部分语句可以是 (注:全部选对的得 2 分,选对但不全的得 1 分,不选或有选错的得 0 分) A.df[df["地区名称"]==city]B.df[df["地区名称"]]==cityC.df[df.地区名称==city]D.df[df."地区名称"]]==city(2)对于图 a 所示的原始数据,小林要进行数据整理:删除“地区编码”、“指标名称”、“计量单位”等对后面统计无用的数据列,请将划线处②的语句补充完整。df=pd.read_excel("PM2.5.xlsx")#删除“地区编码”、“指标名称”、“计量单位”数据列df=df.drop(["指标名称", "地区编码", "计量单位"], axis= ① ) #同一个地市取 PM2.5 浓度最高的值 dfg =② #按 PM2.5 的值升序排序dfg=dfg.sort_values("PM2.5", ascending=True)#输出排序后的最后五行结果print(dfg.tail())(3)对于整理后的数据,在同一个地市中取历次 PM2.5 浓度检测值最高的值,最后按 PM2.5 升序排序数据,输出结果如图c 所示,则第②空应填写的语句是 。(单选,填字母) A.df.groupby("PM2.5").max()B.df.groupby.地区名称.max()C.df.sort_values("PM2.5").max()D.df.groupby("地区名称").max()(4)将排序后的数据分别取 PM2.5 检测值最高和最低的五行数据合并成新的 DataFrame 对象后绘制成柱形图如图d 所示。请将程序补充完整。df2=pd.concat([dfg.head(5), dfg.tail(5)]) #合并两个对象成为新的DataFrame 对象plt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #设置图表字体plt.figure(figsize=(8,4))plt.title("部分县市 PM2.5 浓度对比")plt.xlabel("PM2.5 浓度值")plt.bar(① , df2["PM2.5"],color="orange") for i in range(len(df2)): x=df2.index[i] y=② #text()方法可以绘制数据标签,语法:text(横坐标,纵坐标,显示内容)plt.text(x, y, '%d' % y)答案 (1)AC (2)1 (3)D (4)df2.indexdf2["PM2.5"][i]解析 本题考查pandas数据处理相关知识。(1)将“地区名称”符合条件的数据行筛选出来。(2)参数axis=1表示处理列,即删除指定的列。(3)同一个地市中取PM2.5浓度值最高的数据行可以用分组函数groupby()和求最大值函数max()实现。A选项分组依据不对。B选项的函数格式不对。C选项是按PM2.5先升序排序,然后求所有数据中的最大值,此时PM2.5最大值只有一个数据,无法求出各个地市的最大值。(4)plt.bar()函数绘制柱形图需要两个参数:x轴数据和y轴数据(每个x对应的纵轴数据),由题中图c和图d可知,横坐标是各个地区的名称,而由于数据框df2是分组后的结果,地区名称列已经成为了索引列。②空由程序和标签的效果图可知df2.index[i]取出了每行数据的横坐标值,对应的纵坐标值是df2["PM2.5"][i]。 1.近期学校进行了一次技术学考模拟考试,教师将各班级的部分同学数据录入了“考试成绩.xlsx”文件中(如图a 所示),为了根据学生成绩评定等级,教师特地编写了一个 Python 程序。(1)观察图 a,下列关于“考试成绩.xlsx”中数据存在的问题以及对应的解决方式中,正确的是 。(多选题,多选,错选均不得分,漏选得 1 分) A.数据重复应在进一步审核的基础上进行合并或删除等处理B.数据缺失将上一条数据记录中的数据复制C.格式不统一进行数据转换,形成统一格式D.逻辑错误再次访问数据源,验证数据是否正确(2)在解决数据问题后,进行进一步数据处理,要求如下:a.按照等级评定规则,若学生成绩大于等于 85 分,则等级为优秀,否则等级为合格;b.统计各班级的优秀人数,生成柱形图(如图 b 所示)。现编写程序如下,请在划线处填入合适的代码:import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] #绘图时正常显示中文标签plt.rcParams['axes.unicode_minus']=False #绘图时使用 Unicode 字符df=pd.read_excel('考试成绩.xlsx')for i in range(len(df)): if ① : df.at[i, "等级"]="优秀" else: df.at[i, "等级"]="合格"df=② #筛选出等级为优秀的学生 g=df.groupby("班级", as_index=True).count() plt.title("各班级优秀人数")plt.③ #显示图例 plt.show()(3)若要生成如图 b 所示的图表,加框处的代码应为下列选项中的 。(填字母) A.plt.bar(x,y,label="优秀人数")B.plt.bar(g.班级,g.等级,label="优秀人数")C.plt.bar(g.index,g.等级,label="优秀人数")D.plt.bar(df.index,df.等级,label="优秀人数")答案 (1)AC (2)①df.at[i,"技术"]>=85 或者df["技术"][i]>=85 或者df.技术[i]>=85②df[df.等级=="优秀"]或者 df[df["等级"]=="优秀"] ③legend( ) (3)C2.为了完善某学校食堂管理、持续提高食堂服务质量,让全校师生更加精神饱满地开展工作、学习,对学校食堂进行了一些调查,调查项目共 5 项(具体内容略)。学校后勤管理谢老师收集了 12 个班级的调查结果,分别存储在“dy01.csv”、“dy02.csv”、... 、“dy12.csv”等 12 个文件中(如图 a 所示),每个文件部分界面如图 b 所示。现需要分析 12 个班级学生对这 5 个问题的选“A”情况。谢老师用 Python 的 pandas模块编写了以下代码,实现相关问题的解决。请回答下列问题。(1)定义了 fun_A()函数实现了统计某个班级 5 个问题的选“A”的人数情况。Python程序代码如下,请在划线处填入合适代码。import pandas as pddef fun_A(file): df=pd.read_csv(file) A_list=[] for i in df.columns[1:]: j=c=0 while j if : c+=1 j+=1 A_list.append(c) return A_list(2)调用上述函数,处理 12 个班级每个问题的选“A”的总人数,Python 程序代码如下,请在划线处填入合适代码。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 #每个问题选 A 的人数 for j in range(12): ② y[i]=s(3)经上述处理后,接着以图的形式汇报结果(如图 c 所示),Python 程序代码如下,请回答下列问题。import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']#图表显示中文字体plt.title("每个问题选 A 的总人数") plt.legend()plt.show()划线处代码合适的是 。(单选,填字母) A.plt.bar(x,y)B.plt.bar(x,y,label='A 选项')C.plt.plot(x,y)D.plt.plot(x,y,label='A 选项')(4)调查数据的有效问卷共 550 份,从图 c 中可以观察出有 (填数字)个问题的选“A”总人数低于 60%。 答案 (1)df.at[j,i]=="A"或df[i][j]=="A"(2)①s[i:i+2] ②s+=ans_list[j][i](3)B (4)23.小王收集了 2022 年城市 A 全年每天的部分天气数据,保存在“2022 天气.xls”文件中,部分数据如图a 所示。(1)为统计 2022 年全年晴、阴、雨……的天数,编写了如下的 Python 程序:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel('2022 天气.xls')g= print('2022 年城市 A 天气情况统计如下:')for x in g.index: print(x+':' +str(g[x])+'天')程序运行结果如图 b 所示,则划线处应该填入的代码为 。(单选,填字母) A.df.groupby('天气情况')['日期'].sum()B.df.groupby('天气情况')['日期'].count()C.df.groupby('天气情况').mean()D.df.groupby('天气情况').count()(2)统计 2022 年城市 A 每月平均气温并绘制线形图,部分 Python 程序如下,请在划线处填入合适的代码。s=[0]*12avg=[0]*12 #存储每月平均气温mdays=[0]*12x=[1,2,3,4,5,6,7,8,9,10,11,12]df['平均温度']=(df['最低温度']+df['最高温度'])/2for i in range(365): ① s[int(month)-1]+=df.at[i,'平均温度'] mdays[int(month)-1]+=1for i in range(12): avg[i]=round(② ,1) y=③ plt.plot(x,y) #绘制线形图#设置绘图参数,显示如图c 所示线形图,代码略。(3)由图 c 可知,2022 年城市A 最冷和最热的月份分别是 。 答案 (1)B (2)①month=df['日期'][i][5:7] 或 month=df.at[i,'日期'][5:7]或 month=df.日期[i][5:7] ②s[i]/mdays[i] ③avg (3)2、8解析 (1)全年晴、阴、雨属于天气情况,因此先对天气情况分组,表达式str(g[x])为Series对象的values值,因此按日期分组,且分组的索引就是分组的类别,再对其中一列进行计数。(2)①month是每条记录的月份,df['日期'][i]表示第i天的日期。②avg统计每月的平均温度,每月的温度和累加到列表s中,mdays[i]表示某月的天数。③y轴为每个月的平均温度avg。(3)略。4.小明为了研究某地近十年每月的温差变化,编写Python程序。以2023年4月为例,该月每天的温度数据分别保存在以8位日期字符串命名的excel文件中,部分文件如图a所示,每个文件记录了一天24小时的温度数据,如图b记录了4月28日的数据。(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所示,请在划线处填入代码。def 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))答案 (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。5.某网站服务器五月(31 天)的后台访问记录保存在 log.xlsx 文件中,如图a所示:请回答下列问题:(1)定义 oneday 函数,功能为:读取日期为 day 的访问记录,将访问地区依次保存在列表 city 中,并返回该列表。函数代码如下:import pandas as pddf=pd.read_excel('log.xlsx')def oneday(day): city=[] for i in : if df.at[i,"时间戳"][0:2] == day: city.append(df.at[i,"地区"]) return city划线处代码为: (单选:A.df.index()/B.df.index/C.df.values()/ D.df.values)。 (2)统计该月每天华东五市的访问数据,并绘制线型图,部分 Python 程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as plteastcity = ["上海","南京","杭州","苏州","无锡"]x=[i for i in range(1,32)]y=[]t=0for i in range(1,32): ① if i < 10: day="0" + day city=oneday(day) for j in city: if j in eastcity: ② y.append(t) t=0plt.plot(③ ) plt.show()(3)由图b可知,该网站本月访问量低于 4 万次天数共有 天。 答案 (1)B 或 df.index (2)①day=str(i) ②t+=1 或 t=t+1 ③x,y (3)56.某市中考体测规定,考生要在 6 个体育项目中选 3 个进行测试,少选或多选的同学不符合报名要求。全市 1 万多名考生的报名结果(1 表示选择该项目)保存在文件“tycs.csv”中,如图 a 所示。请回答下列问题:(1)下列有关数据处理的说法正确的是 。(多选,填字母) A.在对数据进行处理前要进行数据整理,解决数据缺失、数据异常、逻辑错误等问题B.编程处理数据能提高数据分析和挖掘的效率,目前只能采用 Python 语言实现C.文本数据处理一般过程包括分词、特征提取、数据分析、结果呈现D.需要将某个整体中各部分的大小和比例进行可视化展示时,可采用饼图、环形图等E.可使用公式“=SUM(D5,I5)”对 Excel 中第 5 行D 列至I 列中的数据进行求和(2)定义函数 filter_data 功能为:读取某市报名的 csv 文件,返回该市所有报名符合要求(在6 个体育项目中选择3 个)的学生信息。函数代码如下,划线处应填入的代码为 。 import pandas as pddef filter_data(datafile): df=pd.read_csv(datafile) #读取文件 datafile 中的数据 df['合计']=df.count(axis=1) - 3# count 函数统计每行中非空数据的个数 df1= return df1(3)统计该市每个组合报名的人数并绘制柱形图,如图b 所示,其中各体育项目名称用相应字母(A~F)代替。部分 Python 程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltdf=filter_data('tycs.csv')d={'A': '800 米跑', 'B': '跳绳', 'C': '游泳', 'D': '引体向上', 'E': '掷实心球', 'F': '立定跳远'}result = {}for i in df.index: ① for key in d: t=df.at[i, d[key]] if t==1: choice += key if choice in result: ② else: result[choice] = 1x=result.keys() #获取字典 result 的键y=result.values() #获取字典 result 的值plt.bar(x, y) #绘制柱形图# 设置绘图参数,显示如图 b 所示柱形型图,代码略(4)由图b 可知,报名人数最多的组合为 (填写体育项目的名称)。 答案 (1)ACD (2)df[df.合计 == 3] (3)①choice = "" ②result[choice] += 1(4)800 米跑、跳绳、游泳一、基础巩固 1.小明收集了某超市部分商品 2022 年上半年每天的价格数据并保存在"data.xlsx"文件中,如图 a 所示。要分析某商品一个月内的价格稳定情况,需要将本月每天(除第一天外)价格波动的绝对值加起来(价格波动=当天价格-前一天价格),其值越小,价格越稳定。为统计该超市 6 月份各商品价格稳定情况,编写如下 Python 程序。请回答下列问题:(1)获取 6 月份各商品的价格,划线处填入的代码为 。(多选,填字母) A.df[df["日期"] >=20220601]B.df["日期" >=20220601]C.df[df.日期 >=20220601]D.df[df["日期"]] >=20220601import pandas as pddf=pd.read_excel("data.xlsx")df= df=df.reset_index(drop=True) #重新设置索引,从 0 开始递增(2)绘制6月份价格稳定情况线形图,部分Python程序如下,请在划线处填入合适代码。import matplotlib.pyplot as pltcols=df.columns[1:] #存储各商品名称n=① m=len(cols)diff=[0]*mfor i in range(m): s=0 for j in range(1, n): day_diff=abs(df[cols[i]][j]-df[cols[i]][j-1]) #计算每天价格波动 s+=day_diff ② x,y=cols,diffplt.plot(③ ) plt.show()(3)由图 b 可知,该超市 6 月份各商品价格最稳定的是 。(单选,填字母) A.商品 A B.商品 BC.商品 C D.商品DE.商品 E答案 (1)AC (2)①len(df) ②diff[i] = s ③x,y (3)B2.某校高三首考后,汇总了学生 7 选 3 成绩,skcj.xlsx 文件部分数据如a 所示,刘老师用Python 程序,来分析各班技术的考试成绩。(1)从图a的skcj.xlsx文件,可提取出每位选考技术同学的技术成绩,在划线处填写相关代码。import pandas as pddf=pd.read_excel("skcj.xlsx")df['技术赋分']=0 #增加一列用来存放技术成绩for i in range(len(df)): for j in range(1,4): if df.at[i, '科目' + str(j)] == '技术': df.at[i, '技术赋分']= break(2)因表彰需要,降序显示成绩前 n 名的同学,由于可能出现同分,实际显示人数可以超过 n,显示结果如图b。n=5#设定表彰人数 ndf=df.sort_values(① ) index=df.index[n - 1]score=df.at[index, '技术赋分'] #求出表彰的最低分数线df2=② print(df2[['姓名','技术赋分']])(3)编写代码绘制如图 c 所示图表,其中有① 个班优生(>=85分)人数超过 10 人,为实现该功能,下面划线处的代码应选择② 。(多选:填字母) A.plt.bar(g.班级, g.技术赋分)B.plt.bar(g['班级'], g['姓名'])C.plt.bar(g.index, g.技术赋分)D.plt.bar(g.index, g['姓名'])#找出df中技术优生(>=85分),并另存为 df1(代码省略)g=df1.groupby('班级').count()import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']plt.title('技术优生人数统计') #多选题 plt.show()答案 (1)df.at[i, "科目"+str(j)+ "赋分"]或df["科目"+str(j)+"赋分"][i] (2)①"技术赋分",ascending= False ②df[df.技术赋分>=score]或df[df["技术赋分"]>=score] (3)①2 ②CD3.为统计分析不同年级学生名字中的常用字,小王同学收集了本校所有学生的名字,并以入学年份为文件名分别保存在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.rcParams [ 'font.sans-serif']=[ 'SimHei']#图表显示中文字体plt.title(xb +"生取名常用字")plt.bar(df3.字, ) plt.show()(4)由图c可知,全校女生名字中出现过30次以上的字有 (填数字)个。 答案 (1)①df.at[i,"性别"]==xb或df["性别"][i]==xb 或df.性别[i]==xb ②mz (2)D(3)df3.个数或 df3["个数"] (4)6解析 本题考查利用Pandas进行数据统计。(1)①找出同性别学生中的每个字,因此索引i的学生性别与函数参数xb相同。②将所有的字存储在列表mz并返回。(2)字典存储姓名中的字,利用该字典创建一个包含"字"和"个数"两列的DataFrame对象,并按字进行分组统计,字是分组的标准,统计的结果在个数列,统计出现最频繁的10个字,需对个数列降序排序。(3)每个字的数量保存在个数列中。(4)略。4.收集某地2022年全年的天气数据,按日期顺序储存在“tqqk.xlsx”文件中,部分界面如图a所示。为计算每月空气质量为优的日期中的平均温差。编写Python程序,请回答下列问题:(1)计算并筛选出空气质量为优的记录信息,Python程序段如下,请在划线处应填入合适的代码。import pandas as pddf=pd.read_excel("tqqk.xlsx")df["温差"]=df["最高温度"]-df["最低温度"]dfy= dfy=dfy.sort_values("日期",ignore_index=True)(2)计算满足条件的日期中的平均温差。并绘制线形图,部分Python程序段如下,请在划线处填入合适的代码。import matplotlib.pyplot as plti=0avewc=[] #月平均温差while i j=i+1 tot=dfy.at[i,"温差"] while j<=len(dfy)-1 and dfy.at[i,"日期"][5:7]==dfy.at[j,"日期"][5:7]: ① j+=1 avewc.append(round(tot/(j-i),2)) ② x=['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']y=③ plt.plot(x,y,label="月平均温差")#设置绘图参数,显示如图b所示线型图,代码略(3)由图b可知,月平均温差超过8的月份共有 个。 答案 (1)df[df.空气质量=='优'] (2)①tot+=dfy.at[j,"温差"] ②i=j ③avewc (3)65.为了解学生在食堂和校园超市的消费情况,学校把 9 月 1-4 日各个窗口的消费数据导出并保存在“eat. xlsx”文件中,数据格式如图a所示。如图b所示,1-14 号窗口为食堂一楼,15-28 号是食堂二楼,29-34号是校园超市。用Python读取该文件并作数据分析后输出如图c所示结果,请回答下列问题。(1)读入数据后,需要将数据集 df 中的数据按窗口号设置相应的位置信息:#引用 pandas 及 matplotlib,并设置参数,代码略df=pd.read_excel('eat.xlsx')df['位置']='' #增加'位置'列,初始值为空for i in ① : if df['窗口'][i] <=14: df['位置'][i]='食堂一楼' elif ② : df['位置'][i]='食堂二楼' else: df['位置'][i]='校内超市'划线①处应填写代码: (单选,填写字母:A. df.index /B. df.columns /C. df.values);划线②处应填写代码: 。 (2)完成窗口号设置后,统计各个位置的金额总和,代码如下:a=['校内超市','食堂一楼','食堂二楼']b=[0,0,0] #存储各个位置的消费总金额for x in df.values: for i in range(3): if x[5] == a[i]: ① plt.bar(② ) #输出如图c所示图表 plt.show()划线①处代码为: ,划线②处代码为: 。 (3)观察图c可知,消费总金额最多的位置是 。(单选,填字母) A.校内超市 B. 食堂一楼 C. 食堂二楼答案 (1)①A ②df['窗口'][i] <=28 (2)①b[i] +=x[3] 或 b[i]=b[i]+x[3] ②a,b (3)C解析 (1)①变量i表示df的行索引。②15-28表示食堂二楼,因此在不满足第一条件情况下,只要小于等于28即可。(2)①变量x表示df.values一行数据,其中x[3] 消费金额,x[5]表示消费位置。对相应的楼层消费金额进行累加。②图表的横轴为消费楼层,纵轴为各楼层消费金额。(3)略。6.小陈在气象部门得到了一份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] 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平方米的光伏发电板共① 块。 (日均发电量=电池板的容量/块×块数×平均日照时数×充放电效率)建设光伏发电设备前要先获得当地的平均日照时数情况,小陈通过如下代码获取相关数据。res=df[df["城市名"]=="温州市"]res=res.values[0][1:13].② print("温州市月平均日照最小值为”,res)答案 (1)计算每个城市的年度平均日照时数(2)C (3)①52 ②min()7.某单位正式员工的基本工资计算公式为:基本工资=岗位工资+薪级工资,如图a和图b,分别对应salary1.xlsx文件和salary2.xlsx文件。员工入职单位一年后转正,定岗位等级为十三级,根据学历定起始的薪级,中专2级、大专5级、本科7级、硕士11级、博士14级。转正定级后,薪级每年增加一级。为统计分析该单位员工的工资情况,编写Python程序。请回答下列问题:(1)定义岗位工资和薪级工资标准查询的两个函数。gwgz函数功能为:读取salary1.xlsx文件,根据岗位等级m,返回对应的工资标准,例如m=“十三级”,gwgz(m)=1585。函数代码如下,划线处应填入的代码为 。(单选,填字母) A.df1.'岗位等级'[i]==mB.df1[岗位等级][i]==mC.df1['岗位等级'][i]==mD.df1[i]['岗位等级']==mimport pandas as pd def gwgz(m): df1=pd.read_excel('salary1.xlsx') for i in df1.index: if : return df1.at[i, '工资标准']xjgz函数功能为:根据薪级等级n,返回对应的工资标准,例如n=10,xjgz(n)=661,代码略。(2)现有员工信息表info.xlsx,所有员工都已经过了实习期,如图c。统计各学历的人数和基本工资的平均值,编写Python程序。请回答下列问题:import datetimedic={'中专':2,'大专':5,'本科':7,'硕士':11,'博士':14}time=datetime.date.today() #获得当前的年月日now_year=time.year #获取年份now_month=time.month #获取月份df=pd.read_excel('info.xlsx')for i in df.index: station=df.at[i, '岗位等级'] past_year=int(df.at[i, '入职年月'][:4]) past_month=int(df.at[i, '入职年月'][5:]) if now_month >=past_month: grade=now_year-past_year-1 else: grade=now_year-past_year-2 grade +=① df.at[i, '基本工资'] =② #计算员工的基本工资 #对各学历的员工计算平均基本工资和统计人数df1=df.groupby('学历',as_index=False).agg({'基本工资':'mean','姓名':'count'}) #修改列名df2=df1.rename(columns={'基本工资': '平均工资', "姓名": "人数"}) #图表对象初始化,代码略ax1.bar(df2.学历, df2.平均工资, label="平均工资") #绘制柱形图ax2.plot(df2.学历,③ , label="人数") #绘制线形图fig.legend()plt.show()(3)目前该单位平均工资为3867.33元,由图d可知,学历为 的员工,他们的平均工资与公司平均工资相差最大。 答案 (1)C (2)①dic[df.at[i,'学历']] ②gwgz(station)+xjgz(grade) ③df2.人数 (3)博士解析 本题考查Pandas数据处理。(1)根据岗位等级m,返回对应的工资标准。(2)①grade表示工作年限,其值为参加工作时间加上学历时间(读大学的年数)。②计算员工的基本工资,基本工资=岗位工资+薪级工资 。③线性图的纵轴为人数。(3)略。8.小红从网上下载收集了浙江省部分海岛2022年10月-12月的天气预报信息,存储在Excel文件中,包含预报时间、站点编号、浪高、温度、风向以及风速,如图a所示,海浪等级信息如图b所示,她要编写一个Python程序快速对海岛天气数据进行分析。浪高值 风浪等级0 无浪1-10 微浪10-25 小浪25-100 中浪>100 大浪图b(1)为了获取该数据集中预报信息最多的海岛站点编号及该岛某月各风浪等级的预报次数,小红需要对图a所示的表中数据进行整理,下列说法正确的是 。(多选,填字母) A.第4行和第5行数据重复,删除其中一行即可B.通过检测发现D7单元格的数据存在错误,应进行修正C.删除“风向”和“风速”两列数据,不影响分析结果D.“浪高”为0的数据没有任何价值,可以直接删除(2)小红利用整理好的数据,编写并运行程序,求出预报信息最多的海岛站点编号并根据给定月份,分析该月的数据并可视化,可视化结果如图c所示,请在划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #设置中文字体显示df=pd.read_excel("浙江省海岛预报信息.xls")def zhengli(): #整理数据 df["风浪等级"]="无浪" for i in df.index: t=df["浪高"][i] if t>100: df["风浪等级"][i]="大浪" elif t>25: df["风浪等级"][i]="中浪" elif t>10: df["风浪等级"][i]="小浪" ① : df["风浪等级"][i]="微浪"for i in df. index: #截取"预报时间"列中的月份日期信息,添加到"月份"列和"日期"列 df.at[i,"月份"]=str(df.at[i,"预报时间"])[5:7] df.at[i,"日期"]=str(df.at[i,"预报时间"])[8:10]zhengli()df1=df.groupby(② , as_index=False).count() df1_sort=df1.sort_values("预报时间" , ascending=False,ignore_index=True)top=df1_sort["站点编号"][0]print("预报信息最多的海岛站点编号是:", top)df2=df[df.站点编号==top]m=input("请输入要查询的月份:")df3=③ df3=df3.groupby("风浪等级").预报时间.count()x=df3.indexy=df3.valuesplt.plot(x,y)#设置绘图参数,绘制如图c所示线形图,代码略。(3)观察图c图表可知,该海岛12月出现天数最多的风浪等级为 。 答案 (1)BC (2)①elif t>=1或elif t>0 ②"站点编号" ③df2[df2.月份==m] (3)微浪二、能力提升9.小明收集了某学校某次模考技术成绩的数据,存储在文件“cj.xlsx”中,其中“xx1”表示信息选择题1,共12个选择题。每小题的分值是2分,如图a所示。各班吻合度偏差较大人数统计如下:1班3人2班7人3班7人4班11人5班5人图b (1)从图a中第一行数据看,该行数据存在的问题是 。(单选,填字母) A.数据缺失 B.逻辑错误C.格式不一致 D.数据异常(2)技术学科包含信息技术与通用技术,需要我们关注学科的平衡,而衡量学科平衡的重要指标是学科吻合度,采用得分差来判断(3分一级:0~2分为0级偏差,3~5分为1级偏差,以此类推),现需要编写Python程序计算吻合度偏差值,并统计各班偏差较大的人数(吻合度>=3),输出结果如图b所示。代码如下,请在划线处填入合适的代码。import pandas as pdplt.rcParams["font.sans-serif"]=["SimHei"]df=pd.read_excel("cj.xlsx")df=df[df.技术!=0]n=len(df)info=[]bjc={1:0,2:0,3:0,4:0,5:0} #存储各班吻合度>=3的人数for i in range(n): info.append([df.班级[i],df.姓名[i],df.信息[i],df.通用[i]]) diff=info[i][2]-info[i][3] info[i].append( ① ) print(info[i][0],"班",info[i][1],"吻合度级别:",info[i][4]) if info[i][4]>=3: ② print("各班吻合度偏差较大人数统计如下:")for bj in bjc: print(bj,"班",bjc[bj],"人")(3)想知道12个信息技术选择题的难度系数(难度系数=平均分/分值),选出错误率最高的5个小题。小明编写程序如下,求各题的难度系数并给错误率最高的5个小题绘制了如图c所示的柱形图。import matplotlib.pyplot as pltdif=[]for i in df.columns[5:]: dif.append(round( ① /2,2)) dic={"题号":df.columns[5:],"难度系数":dif}df1=pd.DataFrame(dic)df1=df1.sort_values("难度系数")plt.figure(figsize=(8,4))plt.title("信息难度最大的5道题对比图")plt.bar(② ) plt.xlabel("题号")plt.ylabel("难度系数")plt.show()答案 (1)B (2)①abs(diff)∥3 ②bjc[info[i][0]]+=1 (3)①df[i].mean() ②df1.题号[0:5], df1.难度系数[0:5]解析 (1)数据存在的问题主要有数据缺失、数据重复、数据异常、逻辑错误、格式不一致等。选择题每题的分值为2属于逻辑错误。(2) ①计算得分差来判断。3分一级:0~2分为0级偏差,3~5分为1级偏差,以此类推。②统计吻合度。info[i][0]存储为班级,字典bjc存储各班的吻合度,依次遍历每位同学的数据,若吻合度>=3,相应班级计数加1。(3)①计算各题平均分。表达式i in df.columns[5:],i为列标签,难度系数=平均分/分值,统计该列的平均分为df[i].mean()。②制作图表数据源,两列数据为题号和难度系数,有题意可知取前5,所以此空为df1.题号[0:5], df1.难度系数[0:5]。10.学校暑期开展“青春迎亚运”活动,邀请高二学生每日参加运动锻炼并进行线上打卡。每周收集一次相关数据,分别保存在相应的xlsx文件中,部分文件如图a所示;每个文件记录了一周7天的打卡数据,示例如图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所示,由图可知,该周参与人气最高的运动项目为 。 答案 (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)略。11.小明通过调查问卷收集了食堂满意度情况数据,保存在“data.csv”文件中,如图a所示。为统计分析每个调查项目不同选项的人数及不满意率,编写Python程序。请回答下列问题:(1)统计每一项调查内容的总票数、满意、一般及不满意人数,程序运行结果如图b所示,请在划线处填入合适的代码。import pandas as pd #导入 pandas 模块import matplotlib. pyplot as plt #导入 pyplot 模块plt. rcParams["font. sans-serif"]=["SimHei"] #设置图表显示中文字体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所示,请在划线处填入合适的代码。df2["不满意率(%)"]=① x=② y=df2["不满意率(%)"]plt.figure(figsize=(8,4))pl.title("食堂调查问卷不满意率(%)情况")plt.bar(x,y,label="不满意率(%) ")plt.legend()答案 (1)①colname ②dfc.at[j,"序号”]或dfc["序号”][j]或dfc.序号[j] (2)①df2["不满意"]/df2["总票数"]*100或df2["不满意"]/po1l*100或df2.不满意/df2.总票数*100或df2.不满意/pol1*100或其它等价答案 ②df2["调查项目"]或df2.调查项目12.小王收集了所在学校高三年级一周预定套餐数据,保存在“yzte.xlsx” 文件中,部分数据如图a所示。编写Pyhon程序,分析高三各班一周各套餐预定情况,确定各班“班级最喜爱的套餐”和“校一周预定套餐之王”。(1)读取 EXCEL文件“yzte.xlsx”中的数据,统计高三各班套餐一周的预定量,输出统计结果,格式如图b 所示。下列划线部分应依次填写 。(单选,填字母) A.groupby('班级')[columns].sum()B.groupby('班级',as_index=False).sum()C.groupby('班级')[columns].count()D.groupby('班级',as_index=False).count()import pandas as pddf=pd.read_excel(' yzte.xlsx')columns = df.columns[3:]df=df. print(df)(2)每班一周套餐预定量最多的套餐为本班“班级最受欢迎的套餐”,统计每种套餐被各班列为“班级最受欢迎”的班级数量。请为下面划线部分填写合适代码。df["班级套餐之最"] = df.max(axis=1)result ={};count ={}for index in df.index : for column in columns: if df["班级套餐之最"][index]==① : if column in result : result[column].append(index) count[column] += 1 else: result[column] =② count[column]=1df1=pd.Series(count)(3)根据第(2)小题的统计结果,绘制如图c所示图表,由图可知,“校一周预定套餐之王”为① 下列是部分绘图代码,请在划线处填写合适代码。import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"]=["song Ti"]plt.title("一周预定套餐之王判定图")plt.bar(count.keys(),② ) plt.show()答案 (1)A (2)①df[column][index]②[index] (3)①套餐A ②count.values(共84张PPT)课时3 利用Pandas模块处理数据第四章 数据处理与应用1.掌握Pandas模块的两种数据结构Series和DataFrame。2.学习使用Pandas模块对数据进行编辑、计算、统计、分析。3.会使用Python进行简单数据处理,并能从其中提取有用信息形成结论。目 录CONTENTS知识梳理01例题精析02随堂检测03巩固与提升04知识梳理11.常用的Python扩展模块有Numpy、Scipy、Pandas和Matplotlib等,Pandas模块主要用于数据的处理和分析。2.Python中引入Pandas模块的方法:import pandas as pd,pd是用户为导入模块取的别名。3.pandas提供了Series和DataFrame两种数据结构。(1)Series(系列)①Series是一种一维的数据结构,包含一个数组的数据和一个与数据关联的索引(index),索引值默认是从0起递增的整数,数据可以是不同类型的元素。列表、字典等可以用来创建Series数据结构。②Series对象属性属性 说明index Series的下标索引,其值默认是从0起递增的整数,也可以指定为字符串型values 存放Series值的一个数组(2)DataFrame(数据框)①DataFrame是一种二维的数据结构,由1个索引列(index)和若干个数据列组成,每个数据列可以是不同的类型。DataFrame可以看作是共享同一个index的Series的集合。创建DataFrame对象的方法很多,通常用一个相等长度的列表或字典来创建。②DataFrame常用对象属性属性 说明index DataFrame的行索引columns 存放各列的标题values 存放二维数据的值T 行列转置4.数据可视化是将数据以图形图像等形式表示,直接呈现数据中蕴含信息的处理过程。5.matplotlib绘图(1)matplotlib是一个绘图库,使用其中的______________子库提供的函数可以快速绘图和设置图表的坐标轴、坐标轴刻度、图例等。(2)引入matplotlib的pyplot子库的方法为:____________________________。 6.可视化的作用____________________、______________、增强数据的解释力与吸引力等。pyplotimport matplotlib.pyplot as plt快捷观察与追踪数据实时分析数据7.数据以可视化方式展现出来,用户可以通过直观、交互的方式浏览和观察数据,发现数据中隐藏的______、______和______。如“百度地图”“百度指数”“航班飞行实时跟踪地图”等。8.可视化的工具(1)常见的数据分析中一般包含创建可视化图表功能,主要用于数据可视化的工具有大数据魔镜、Gephi、Tableanu等。(2)使用Python、R等计算机语言编写程序实现数据的可视化。(3)可视化工具库,如基于JavaScript的D3.js、Highcharts、GooleCharts等,基于Python的matplotlib等。特征关系模式9.可视化的典型案例数据以可视化方式展现出来,用户可以通过直观、交互的方式浏览和观察数据,发现数据中隐藏的特征、关系和模式,如“风、气象、海洋状况的全球地图”、“百度地图”、“百度指数”、“编程语言之间的影响力关系图”、“航班飞行实时跟踪地图”、“微博热词趋势图”等。重难点剖析1.Pandas模块中的Series对象(1)创建Seriesimport pandas as pds1=pd.Series([1,2,3,4])s2=pd.Series([1,2,3,4],index=["a","b","c","d"])(2)Series对象的检索和修改输出索引值为0的值:print(s1[0])输出索引值为"b"的值:print(s2["b"])输出values小于3的值:print(s1[s1<3])修改索引值为1的值为10:s1[1]=102.Pandas模块中DataFrame对象(1)创建DataFrame对象①使用一个相等长度的列表或字典创建DataFrame对象。如x=pd.DataFrame({"x1":[1,2,3,4],"x2":[5,6,7,8],"x3":[9,10,11,12]})②导入二维数据文件创建DataFrame对象。pd.read_excel(filename) #从Excel文件导入数据pd.read_csv(filename) #从CSV文件导入数据③DataFrame对象导出到二维数据文件df.to_excel(filename) #导出数据到Excel文件df.to_csv(filename) #导出数据到CSV文件(2)查看DataFrame对象通过index、columns、values属性可以查看DataFrame对象的行索引、列索引及数据,如:df.index、df.columns、df.values。查看数据列:通过字典记法或属性检索DataFrame对象中的一列数据,如:df['id']或df.id。查看数据行:通过head()、tail()返回DataFrame的前n行、后n行数据;通过索引查看指定行,如:df[2:5],返回df对象中第2、3、4行数据;通过布尔型数据选取满足条件的行。如:df[df["age"]>=18]。使用at[]方法可以根据行标签和列标签选取单个值,如:df.at[0,"姓名"]。(3)DataFrame对象中行、列的编辑可以通过insert()、drop()、rename()、append()、set_value()等函数进行DataFrame对象中行、列的编辑。(4)DataFrame对象中数据的统计与计算可以使用count()、sum()、mean()、max()、min()、describe()、groupby()等函数对DataFrame对象中的数据进行统计与计算。(5)DataFrame对象中数据的排序按索引排序可以使用sort_index()函数;按值排序可以使用sort_values()函数。通过选项axis=0/1确定排序的轴向,axis默认值为0,纵向排序。通过选项ascending=True/False确定升/降序,ascending默认值为True,升序排序;排序结果返回一个新DataFrame对象。例题精析2例1 小原爸爸负责接小原放学,一段时间内,他爸爸将每天接他时的堵车时间和天气情况记录在文件“data.xlsx”中,其中堵车时间的单位为分钟,如图 a 所示,并通过 Python 语言编程制作的图表如图 b 所示。(1)通过对图 b 的分析可知,天气情况与堵车时间 (单选,填字母:A.有/B.没有)一定的关系。 (2)部分程序代码如下,请在划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签df=pd.read_excel("data.xlsx") #读取 Excel 文件中的数据df=df.groupby("天气情况", as_index = False). ① #按“天气情况”分组求平均数 df=df.sort_values(" ② ",ascending= False) x=③ y=df["堵车时间"]plt.title("不同天气情况的平均堵车时间分析") #设置图表标题plt.bar(x, y) #绘制柱形图plt.show()答案 (1)A (2)①mean() ②堵车时间③df["天气情况"]或df.天气情况解析 本题考查利用Pandas模块统计数据和利用pyplot绘制图像相关操作。(1)从题图 b 可以看出,最堵的时间与天气及雨势大小相关。(2)①分组后用mean求平均数。②降序排序的参数为 ascending=False。从题图b中可以得知为按堵车时间降序排列。(3)题图 b的x 轴数据为“天气情况” ,而 df 已按“天气情况”进行了分组。变式训练1 某学校运动会高一年级各个选手得分情况存储在“运动会得分.xlsx”数据文件中(如图a所示),现准备利用Python程序对这些数据进行统计分析并可视化,请根据要求回答下列问题(注: 已对重名做技术处理)。(1)文件“运动会得分.xlsx”中的数据是 (选填:结构化数据/半结构化数据/非结构化数据)。 (2)编写如下Python程序,统计各班总分,并建立图b所示图表:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel("运动会得分.xlsx")#统计各班总得分情况,并建立图表,如图b所示df1=df1.sort_values("班级",ascending=True)#按班级升序排列df1=df.groupby(① ,as_index=False).② #统计各班总得分 plt.title("高一年级各班总分汇总图") #添加图表标题plt.bar(df1["班级"],③ ) plt.show()#输出本年级最具价值运动员,最具价值运动员是本年级中得分最高的运动员,图c所示df3=df.groupby("姓名",as_index=False).得分.sum()maxdf=df3.得分.max()print("最具价值运动员:")print(④ ) 答案 (1)结构化数据 (2)①"班级" ②sum() ③df1["得分"]或df1.得分 ④df3[df3["得分"]==maxdf]或df3[df3["得分"]>=maxdf]解析 本题考查利用Pandas模块统计数据和利用pyplot绘制图像相关操作。(1)Excel文件按行按列存储数据,属于结构化数据。(2)统计各班总得分,需按班级进行分组,并对每个班级得分进行求和操作。因此①为班级,②为sum()函数进行求和。③图表纵轴为每个总分之和,因此③为df1对象中的得分列。④最具价值运动员可能有多名,因此应筛选出得分大于或等于最高分的记录。例2 2023 年女足世界杯小组赛晋级规则为:32 支参赛队伍通过抽签分为八个小组,每个小组分别有四支球队进行比赛,胜平负分别积 3 分、1 分、0 分。每个小组积分的前两名球队晋级,积分相同的净胜球多的球队晋级,净胜球相同的进球数多的球队晋级。小组赛数据存放在“女足世界杯小组赛积分.xlsx”文件中,如图 a 所示。现用 Python 程序对表中数据进行处理,得到 16 支晋级球队名单,并输出如图 b 所示的图表。(1)定义 tj 函数,功能为:使用 Pandas 读取文件数据,计算每支球队的积分,并返回一个 Dataframe 对象。实现相应功能的 Python 函数代码如下,划线处应填入的代码为 。 import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']#显示中文def tj(filename): #filename 为 excel 文件名称 df=pd.read_excel(filename) for i in df.index: df.at[i,"积分"]= return df(2)定义jsq函数,将Dataframe对象df中的“进失比”列(如数据"8比1",8为进球数,1为失球数,净胜球数为7)求出各球队的净胜球、进球数。划线处应填入的代码为 。 def jsq(df): for i in df.index: a,b=map(int,df.at[i,"进失比"].split("比")) #8比1,则a=8,b=1 df.at[i,"进球数"]=a return df (3)为了求出八个小组中晋级名单,按照小组A~H、积分由高到低的顺序,绘制图表如图b所示。实现相应功能的代码如下:filename="女足世界杯小组赛积分.xlsx"df=tj(filename)df=① #以“小组”为主要关键字升序,“积分”“净胜球”“进球数”为次要关键字降序排列df=df.sort_values(["小组",'积分', "净胜球" ,'进球'],ascending=[② ,False,False,False]) #按小组分组并取出每组前 2 队数据 df1=df.groupby(③ ,as_index=False).head(2) plt.bar(④ ) #绘制如图 b 所示图表 plt.title('2023 女足世界杯 16 强球队')#设置图表格式,代码略plt.show()答案 (1)df.at[i,"胜"] * 3 + df.at[i,"平"](2)df.at[i,"净胜球"] = a - b (3)①jsq(df) ②True ③"小组" ④df1["球队"],df1["积分"]解析 本题考查利用Pandas进行数据统计的相关知识。(1)计算每支球队的积分。胜平负分别积 3 分、1 分、0 分,因此每个单元格的计算公式为df.at[i,"胜"] * 3 + df.at[i,"平"]。(2)计算各球队净胜球,变量a表示进球数,变量b表示失球数,净胜球的值为a-b数。(3)①调用jsq函数,计算df中的“进失比”列。②以“小组”为主要关键字升序,升序的ascending值为True。③绘制各个小组的积分情况,因此需按小组进行分组并取出每组前2 队数据。④图表横轴为各小组前2名df1["球队"],纵轴为各小组对应的积分df1["积分"]。变式训练2 张三同学收集了一个地区 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 所示,请在划线处填入合适的代码。import 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=③ 答案 (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)骑行次数应对分组后数据进行计数。例3 小红收集了部分城市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 pltdef 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月平均浓度超过年平均浓度的月份共 个。 答案 (1)D (2)①mdays[m] ②sm += sd ③pm (3)5解析 (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月。变式训练3 小林收集了各地市各年份检测的 PM2.5 浓度值保存于 Excel 文件“PM2.5.xlsx”中,部分数据如图 a 所示。小林使用Python 进行数据分析,请回答以下问题。(1)小林先将同一个地区的数据输出到各自独立的 Excel 文件中,部分结果如图 b 所示,实现程序如下所示:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel("PM2.5.xlsx")#cities 保存所有地区名称,这里仅演示部分数据cities=["安吉县", "淳安县", "慈溪市", "杭州市", "湖州市"]for city in cities: dfc= dfc.to_excel(city + ".xlsx", index=False) # 输出文件结果示例如图 b 所示那么划线部分语句可以是 (注:全部选对的得 2 分,选对但不全的得 1 分,不选或有选错的得 0 分) A.df[df["地区名称"]==city]B.df[df["地区名称"]]==cityC.df[df.地区名称==city]D.df[df."地区名称"]]==city(2)对于图 a 所示的原始数据,小林要进行数据整理:删除“地区编码”、“指标名称”、“计量单位”等对后面统计无用的数据列,请将划线处②的语句补充完整。df=pd.read_excel("PM2.5.xlsx")#删除“地区编码”、“指标名称”、“计量单位”数据列df=df.drop(["指标名称", "地区编码", "计量单位"], axis= ① ) #同一个地市取 PM2.5 浓度最高的值 dfg =② #按 PM2.5 的值升序排序dfg=dfg.sort_values("PM2.5", ascending=True)#输出排序后的最后五行结果print(dfg.tail())(3)对于整理后的数据,在同一个地市中取历次 PM2.5 浓度检测值最高的值,最后按 PM2.5 升序排序数据,输出结果如图c 所示,则第②空应填写的语句是 。(单选,填字母) A.df.groupby("PM2.5").max()B.df.groupby.地区名称.max()C.df.sort_values("PM2.5").max()D.df.groupby("地区名称").max()(4)将排序后的数据分别取 PM2.5 检测值最高和最低的五行数据合并成新的 DataFrame 对象后绘制成柱形图如图d 所示。请将程序补充完整。df2=pd.concat([dfg.head(5), dfg.tail(5)]) #合并两个对象成为新的DataFrame 对象plt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #设置图表字体plt.figure(figsize=(8,4))plt.title("部分县市 PM2.5 浓度对比")plt.xlabel("PM2.5 浓度值")plt.bar(① , df2["PM2.5"],color="orange") for i in range(len(df2)): x=df2.index[i] y=② #text()方法可以绘制数据标签,语法:text(横坐标,纵坐标,显示内容)plt.text(x, y, '%d' % y)答案 (1)AC (2)1 (3)D (4)df2.index df2["PM2.5"][i]解析 本题考查pandas数据处理相关知识。(1)将“地区名称”符合条件的数据行筛选出来。(2)参数axis=1表示处理列,即删除指定的列。(3)同一个地市中取PM2.5浓度值最高的数据行可以用分组函数groupby()和求最大值函数max()实现。A选项分组依据不对。B选项的函数格式不对。C选项是按PM2.5先升序排序,然后求所有数据中的最大值,此时PM2.5最大值只有一个数据,无法求出各个地市的最大值。(4)plt.bar()函数绘制柱形图需要两个参数:x轴数据和y轴数据(每个x对应的纵轴数据),由题中图c和图d可知,横坐标是各个地区的名称,而由于数据框df2是分组后的结果,地区名称列已经成为了索引列。②空由程序和标签的效果图可知df2.index[i]取出了每行数据的横坐标值,对应的纵坐标值是df2["PM2.5"][i]。随堂检测31.近期学校进行了一次技术学考模拟考试,教师将各班级的部分同学数据录入了“考试成绩.xlsx”文件中(如图a 所示),为了根据学生成绩评定等级,教师特地编写了一个 Python 程序。(1)观察图 a,下列关于“考试成绩.xlsx”中数据存在的问题以及对应的解决方式中,正确的是 。(多选题,多选,错选均不得分,漏选得 1 分) A.数据重复应在进一步审核的基础上进行合并或删除等处理B.数据缺失将上一条数据记录中的数据复制C.格式不统一进行数据转换,形成统一格式D.逻辑错误再次访问数据源,验证数据是否正确(2)在解决数据问题后,进行进一步数据处理,要求如下:a.按照等级评定规则,若学生成绩大于等于 85 分,则等级为优秀,否则等级为合格;b.统计各班级的优秀人数,生成柱形图(如图 b 所示)。现编写程序如下,请在划线处填入合适的代码:import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] #绘图时正常显示中文标签plt.rcParams['axes.unicode_minus']=False #绘图时使用 Unicode 字符df=pd.read_excel('考试成绩.xlsx')for i in range(len(df)): if ① : df.at[i, "等级"]="优秀" else: df.at[i, "等级"]="合格"df=② #筛选出等级为优秀的学生 g=df.groupby("班级", as_index=True).count() plt.title("各班级优秀人数")plt.③ #显示图例 plt.show()(3)若要生成如图 b 所示的图表,加框处的代码应为下列选项中的 。(填字母) A.plt.bar(x,y,label="优秀人数")B.plt.bar(g.班级,g.等级,label="优秀人数")C.plt.bar(g.index,g.等级,label="优秀人数")D.plt.bar(df.index,df.等级,label="优秀人数")答案 (1)AC (2)①df.at[i,"技术"]>=85 或者df["技术"][i]>=85 或者df.技术[i]>=85②df[df.等级=="优秀"]或者 df[df["等级"]=="优秀"] ③legend( ) (3)C2.为了完善某学校食堂管理、持续提高食堂服务质量,让全校师生更加精神饱满地开展工作、学习,对学校食堂进行了一些调查,调查项目共 5 项(具体内容略)。学校后勤管理谢老师收集了 12 个班级的调查结果,分别存储在“dy01.csv”、“dy02.csv”、... 、“dy12.csv”等 12 个文件中(如图 a 所示),每个文件部分界面如图 b 所示。现需要分析 12 个班级学生对这 5 个问题的选“A”情况。谢老师用 Python 的 pandas模块编写了以下代码,实现相关问题的解决。请回答下列问题。(1)定义了 fun_A()函数实现了统计某个班级 5 个问题的选“A”的人数情况。Python程序代码如下,请在划线处填入合适代码。import pandas as pddef fun_A(file): df=pd.read_csv(file) A_list=[] for i in df.columns[1:]: j=c=0 while j if : c+=1 j+=1 A_list.append(c) return A_list(2)调用上述函数,处理 12 个班级每个问题的选“A”的总人数,Python 程序代码如下,请在划线处填入合适代码。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 #每个问题选 A 的人数 for j in range(12): ② y[i]=s(3)经上述处理后,接着以图的形式汇报结果(如图 c 所示),Python 程序代码如下,请回答下列问题。import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']#图表显示中文字体plt.title("每个问题选 A 的总人数") plt.legend()plt.show()划线处代码合适的是 。(单选,填字母) A.plt.bar(x,y)B.plt.bar(x,y,label='A 选项')C.plt.plot(x,y)D.plt.plot(x,y,label='A 选项')(4)调查数据的有效问卷共 550 份,从图 c 中可以观察出有 (填数字)个问题的选“A”总人数低于 60%。 答案 (1)df.at[j,i]=="A"或df[i][j]=="A"(2)①s[i:i+2] ②s+=ans_list[j][i](3)B (4)23.小王收集了 2022 年城市 A 全年每天的部分天气数据,保存在“2022 天气.xls”文件中,部分数据如图a 所示。(1)为统计 2022 年全年晴、阴、雨……的天数,编写了如下的 Python 程序:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel('2022 天气.xls')g= print('2022 年城市 A 天气情况统计如下:')for x in g.index: print(x+':' +str(g[x])+'天')程序运行结果如图 b 所示,则划线处应该填入的代码为 。(单选,填字母) A.df.groupby('天气情况')['日期'].sum()B.df.groupby('天气情况')['日期'].count()C.df.groupby('天气情况').mean()D.df.groupby('天气情况').count()(2)统计 2022 年城市 A 每月平均气温并绘制线形图,部分 Python 程序如下,请在划线处填入合适的代码。s=[0]*12avg=[0]*12 #存储每月平均气温mdays=[0]*12x=[1,2,3,4,5,6,7,8,9,10,11,12]df['平均温度']=(df['最低温度']+df['最高温度'])/2for i in range(365): ① s[int(month)-1]+=df.at[i,'平均温度'] mdays[int(month)-1]+=1for i in range(12): avg[i]=round(② ,1) y=③ plt.plot(x,y) #绘制线形图#设置绘图参数,显示如图c 所示线形图,代码略。(3)由图 c 可知,2022 年城市A 最冷和最热的月份分别是 。 答案 (1)B (2)①month=df['日期'][i][5:7] 或 month=df.at[i,'日期'][5:7]或 month=df.日期[i][5:7] ②s[i]/mdays[i] ③avg (3)2、8解析 (1)全年晴、阴、雨属于天气情况,因此先对天气情况分组,表达式str(g[x])为Series对象的values值,因此按日期分组,且分组的索引就是分组的类别,再对其中一列进行计数。(2)①month是每条记录的月份,df['日期'][i]表示第i天的日期。②avg统计每月的平均温度,每月的温度和累加到列表s中,mdays[i]表示某月的天数。③y轴为每个月的平均温度avg。(3)略。4.小明为了研究某地近十年每月的温差变化,编写Python程序。以2023年4月为例,该月每天的温度数据分别保存在以8位日期字符串命名的excel文件中,部分文件如图a所示,每个文件记录了一天24小时的温度数据,如图b记录了4月28日的数据。(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所示,请在划线处填入代码。def 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))答案 (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。5.某网站服务器五月(31 天)的后台访问记录保存在 log.xlsx 文件中,如图a所示:请回答下列问题:(1)定义 oneday 函数,功能为:读取日期为 day 的访问记录,将访问地区依次保存在列表 city 中,并返回该列表。函数代码如下:import pandas as pddf=pd.read_excel('log.xlsx')def oneday(day): city=[] for i in : if df.at[i,"时间戳"][0:2] == day: city.append(df.at[i,"地区"]) return city划线处代码为: (单选:A.df.index()/B.df.index/C.df.values()/ D.df.values)。 (2)统计该月每天华东五市的访问数据,并绘制线型图,部分 Python 程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as plteastcity = ["上海","南京","杭州","苏州","无锡"]x=[i for i in range(1,32)]y=[]t=0for i in range(1,32): ① if i < 10: day="0" + day city=oneday(day) for j in city: if j in eastcity: ② y.append(t) t=0plt.plot(③ ) plt.show()(3)由图b可知,该网站本月访问量低于 4 万次天数共有 天。 答案 (1)B 或 df.index (2)①day=str(i) ②t+=1 或 t=t+1 ③x,y (3)56.某市中考体测规定,考生要在 6 个体育项目中选 3 个进行测试,少选或多选的同学不符合报名要求。全市 1 万多名考生的报名结果(1 表示选择该项目)保存在文件“tycs.csv”中,如图 a 所示。请回答下列问题:(1)下列有关数据处理的说法正确的是 。(多选,填字母) A.在对数据进行处理前要进行数据整理,解决数据缺失、数据异常、逻辑错误等问题B.编程处理数据能提高数据分析和挖掘的效率,目前只能采用 Python 语言实现C.文本数据处理一般过程包括分词、特征提取、数据分析、结果呈现D.需要将某个整体中各部分的大小和比例进行可视化展示时,可采用饼图、环形图等E.可使用公式“=SUM(D5,I5)”对 Excel 中第 5 行D 列至I 列中的数据进行求和(2)定义函数 filter_data 功能为:读取某市报名的 csv 文件,返回该市所有报名符合要求(在6 个体育项目中选择3 个)的学生信息。函数代码如下,划线处应填入的代码为 。 import pandas as pddef filter_data(datafile): df=pd.read_csv(datafile) #读取文件 datafile 中的数据 df['合计']=df.count(axis=1) - 3# count 函数统计每行中非空数据的个数 df1= return df1解(3)统计该市每个组合报名的人数并绘制柱形图,如图b 所示,其中各体育项目名称用相应字母(A~F)代替。部分 Python 程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltdf=filter_data('tycs.csv')d={'A': '800 米跑', 'B': '跳绳', 'C': '游泳', 'D': '引体向上', 'E': '掷实心球', 'F': '立定跳远'}result = {}for i in df.index: ① for key in d: t=df.at[i, d[key]] if t==1: choice += key if choice in result: ② else: result[choice] = 1x=result.keys() #获取字典 result 的键y=result.values() #获取字典 result 的值plt.bar(x, y) #绘制柱形图# 设置绘图参数,显示如图 b 所示柱形型图,代码略(4)由图b 可知,报名人数最多的组合为 (填写体育项目的名称)。 答案 (1)ACD (2)df[df.合计 == 3] (3)①choice = "" ②result[choice] += 1(4)800 米跑、跳绳、游泳课时3 利用Pandas模块处理数据课时目标1.掌握Pandas模块的两种数据结构Series和DataFrame。2.学习使用Pandas模块对数据进行编辑、计算、统计、分析。3.会使用Python进行简单数据处理,并能从其中提取有用信息形成结论。1.常用的Python扩展模块有Numpy、Scipy、Pandas和Matplotlib等,Pandas模块主要用于数据的处理和分析。2.Python中引入Pandas模块的方法:import pandas as pd,pd是用户为导入模块取的别名。3.pandas提供了Series和DataFrame两种数据结构。(1)Series(系列)①Series是一种一维的数据结构,包含一个数组的数据和一个与数据关联的索引(index),索引值默认是从0起递增的整数,数据可以是不同类型的元素。列表、字典等可以用来创建Series数据结构。②Series对象属性属性 说明index Series的下标索引,其值默认是从0起递增的整数,也可以指定为字符串型values 存放Series值的一个数组(2)DataFrame(数据框)①DataFrame是一种二维的数据结构,由1个索引列(index)和若干个数据列组成,每个数据列可以是不同的类型。DataFrame可以看作是共享同一个index的Series的集合。创建DataFrame对象的方法很多,通常用一个相等长度的列表或字典来创建。②DataFrame常用对象属性属性 说明index DataFrame的行索引columns 存放各列的标题values 存放二维数据的值T 行列转置4.数据可视化是将数据以图形图像等形式表示,直接呈现数据中蕴含信息的处理过程。5.matplotlib绘图(1)matplotlib是一个绘图库,使用其中的________子库提供的函数可以快速绘图和设置图表的坐标轴、坐标轴刻度、图例等。(2)引入matplotlib的pyplot子库的方法为:________________________。6.可视化的作用______________________、________________、增强数据的解释力与吸引力等。7.数据以可视化方式展现出来,用户可以通过直观、交互的方式浏览和观察数据,发现数据中隐藏的________、________和________。如“百度地图”“百度指数”“航班飞行实时跟踪地图”等。8.可视化的工具(1)常见的数据分析中一般包含创建可视化图表功能,主要用于数据可视化的工具有大数据魔镜、Gephi、Tableanu等。(2)使用Python、R等计算机语言编写程序实现数据的可视化。(3)可视化工具库,如基于JavaScript的D3.js、Highcharts、GooleCharts等,基于Python的matplotlib等。9.可视化的典型案例数据以可视化方式展现出来,用户可以通过直观、交互的方式浏览和观察数据,发现数据中隐藏的特征、关系和模式,如“风、气象、海洋状况的全球地图”、“百度地图”、“百度指数”、“编程语言之间的影响力关系图”、“航班飞行实时跟踪地图”、“微博热词趋势图”等。1.Pandas模块中的Series对象(1)创建Seriesimport pandas as pds1=pd.Series([1,2,3,4])s2=pd.Series([1,2,3,4],index=[″a″,″b″,″c″,″d″])(2)Series对象的检索和修改输出索引值为0的值:print(s1[0])输出索引值为″b″的值:print(s2[″b″])输出values小于3的值:print(s1[s1<3])修改索引值为1的值为10:s1[1]=102.Pandas模块中DataFrame对象(1)创建DataFrame对象①使用一个相等长度的列表或字典创建DataFrame对象。如x=pd.DataFrame({″x1″:[1,2,3,4],″x2″:[5,6,7,8],″x3″:[9,10,11,12]})②导入二维数据文件创建DataFrame对象。pd.read_excel(filename) #从Excel文件导入数据pd.read_csv(filename) #从CSV文件导入数据③DataFrame对象导出到二维数据文件df.to_excel(filename) #导出数据到Excel文件df.to_csv(filename) #导出数据到CSV文件(2)查看DataFrame对象通过index、columns、values属性可以查看DataFrame对象的行索引、列索引及数据,如:df.index、df.columns、df.values。查看数据列:通过字典记法或属性检索DataFrame对象中的一列数据,如:df['id']或df.id。查看数据行:通过head()、tail()返回DataFrame的前n行、后n行数据;通过索引查看指定行,如:df[2:5],返回df对象中第2、3、4行数据;通过布尔型数据选取满足条件的行。如:df[df[″age″]>=18]。使用at[]方法可以根据行标签和列标签选取单个值,如:df.at[0,″姓名″]。(3)DataFrame对象中行、列的编辑可以通过insert()、drop()、rename()、append()、set_value()等函数进行DataFrame对象中行、列的编辑。(4)DataFrame对象中数据的统计与计算可以使用count()、sum()、mean()、max()、min()、describe()、groupby()等函数对DataFrame对象中的数据进行统计与计算。(5)DataFrame对象中数据的排序按索引排序可以使用sort_index()函数;按值排序可以使用sort_values()函数。通过选项axis=0/1确定排序的轴向,axis默认值为0,纵向排序。通过选项ascending=True/False确定升/降序,ascending默认值为True,升序排序;排序结果返回一个新DataFrame对象。例1 小原爸爸负责接小原放学,一段时间内,他爸爸将每天接他时的堵车时间和天气情况记录在文件“data.xlsx”中,其中堵车时间的单位为分钟,如图 a 所示,并通过 Python 语言编程制作的图表如图 b 所示。(1)通过对图 b 的分析可知,天气情况与堵车时间________(单选,填字母:A.有/B.没有)一定的关系。(2)部分程序代码如下,请在划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签df=pd.read_excel(″data.xlsx″) #读取 Excel 文件中的数据df=df.groupby(″天气情况″, as_index = False). ①________ #按“天气情况”分组求平均数df=df.sort_values(″ ②________″,ascending= False)x=③________y=df[″堵车时间″]plt.title(″不同天气情况的平均堵车时间分析″) #设置图表标题plt.bar(x, y) #绘制柱形图plt.show()听课笔记: 变式训练1 某学校运动会高一年级各个选手得分情况存储在“运动会得分.xlsx”数据文件中(如图a所示),现准备利用Python程序对这些数据进行统计分析并可视化,请根据要求回答下列问题(注: 已对重名做技术处理)。(1)文件“运动会得分.xlsx”中的数据是________________(选填:结构化数据/半结构化数据/非结构化数据)。(2)编写如下Python程序,统计各班总分,并建立图b所示图表:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel(″运动会得分.xlsx″)#统计各班总得分情况,并建立图表,如图b所示df1=df1.sort_values(″班级″,ascending=True)#按班级升序排列df1=df.groupby(①________,as_index=False).②________ #统计各班总得分plt.title(″高一年级各班总分汇总图″) #添加图表标题plt.bar(df1[″班级″],③__________)plt.show()#输出本年级最具价值运动员,最具价值运动员是本年级中得分最高的运动员,图c所示df3=df.groupby(″姓名″,as_index=False).得分.sum()maxdf=df3.得分.max()print(″最具价值运动员:″)print(④__________)例2 2023 年女足世界杯小组赛晋级规则为:32 支参赛队伍通过抽签分为八个小组,每个小组分别有四支球队进行比赛,胜平负分别积 3 分、1 分、0 分。每个小组积分的前两名球队晋级,积分相同的净胜球多的球队晋级,净胜球相同的进球数多的球队晋级。小组赛数据存放在“女足世界杯小组赛积分.xlsx”文件中,如图 a 所示。现用 Python 程序对表中数据进行处理,得到 16 支晋级球队名单,并输出如图 b 所示的图表。(1)定义 tj 函数,功能为:使用 Pandas 读取文件数据,计算每支球队的积分,并返回一个 Dataframe 对象。实现相应功能的 Python 函数代码如下,划线处应填入的代码为________。import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']#显示中文def tj(filename): #filename 为 excel 文件名称 df=pd.read_excel(filename) for i in df.index: df.at[i,″积分″]=________ return df(2)定义jsq函数,将Dataframe对象df中的“进失比”列(如数据″8比1″,8为进球数,1为失球数,净胜球数为7)求出各球队的净胜球、进球数。划线处应填入的代码为________。def jsq(df): for i in df.index: a,b=map(int,df.at[i,″进失比″].split(″比″)) #8比1,则a=8,b=1 ______________ df.at[i,″进球数″]=a return df (3)为了求出八个小组中晋级名单,按照小组A~H、积分由高到低的顺序,绘制图表如图b所示。实现相应功能的代码如下:filename=″女足世界杯小组赛积分.xlsx″df=tj(filename)df=①__________#以“小组”为主要关键字升序,“积分”“净胜球”“进球数”为次要关键字降序排列df=df.sort_values([″小组″,'积分', ″净胜球″ ,'进球'],ascending=[②________ ,False,False,False]) #按小组分组并取出每组前 2 队数据df1=df.groupby(③________,as_index=False).head(2)plt.bar(④________) #绘制如图 b 所示图表plt.title('2023 女足世界杯 16 强球队')#设置图表格式,代码略plt.show()听课笔记: 变式训练2 张三同学收集了一个地区 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=it=________ + int(s[q+1:])return t(2)统计本月各类型单车的每天平均骑行时长,并绘制柱形图,代码如下,绘制的图表如图 b 所示,请在划线处填入合适的代码。import 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).用户编号.例3 小红收集了部分城市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 pltdef 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月平均浓度超过年平均浓度的月份共________个。听课笔记: 变式训练3 小林收集了各地市各年份检测的 PM2.5 浓度值保存于 Excel 文件“PM2.5.xlsx”中,部分数据如图 a 所示。小林使用Python 进行数据分析,请回答以下问题。(1)小林先将同一个地区的数据输出到各自独立的 Excel 文件中,部分结果如图 b 所示,实现程序如下所示:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel(″PM2.5.xlsx″)#cities 保存所有地区名称,这里仅演示部分数据cities=[″安吉县″, ″淳安县″, ″慈溪市″, ″杭州市″, ″湖州市″]for city in cities: dfc=________ dfc.to_excel(city + ″.xlsx″, index=False) # 输出文件结果示例如图 b所示那么划线部分语句可以是________(注:全部选对的得 2 分,选对但不全的得 1 分,不选或有选错的得 0 分)A.df[df[″地区名称″]==city]B.df[df[″地区名称″]]==cityC.df[df.地区名称==city]D.df[df.″地区名称″]]==city(2)对于图 a 所示的原始数据,小林要进行数据整理:删除“地区编码”、“指标名称”、“计量单位”等对后面统计无用的数据列,请将划线处②的语句补充完整。df=pd.read_excel(″PM2.5.xlsx″)#删除“地区编码”、“指标名称”、“计量单位”数据列df=df.drop([″指标名称″, ″地区编码″, ″计量单位″], axis= ①____ ) #同一个地市取 PM2.5 浓度最高的值dfg =②________#按 PM2.5 的值升序排序dfg=dfg.sort_values(″PM2.5″, ascending=True)#输出排序后的最后五行结果print(dfg.tail())(3)对于整理后的数据,在同一个地市中取历次 PM2.5 浓度检测值最高的值,最后按 PM2.5 升序排序数据,输出结果如图c 所示,则第②空应填写的语句是________。(单选,填字母)A.df.groupby(″PM2.5″).max()B.df.groupby.地区名称.max()C.df.sort_values(″PM2.5″).max()D.df.groupby(″地区名称″).max()(4)将排序后的数据分别取 PM2.5 检测值最高和最低的五行数据合并成新的 DataFrame 对象后绘制成柱形图如图d 所示。请将程序补充完整。df2=pd.concat([dfg.head(5), dfg.tail(5)]) #合并两个对象成为新的DataFrame对象plt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #设置图表字体plt.figure(figsize=(8,4))plt.title(″部分县市 PM2.5 浓度对比″)plt.xlabel(″PM2.5 浓度值″)plt.bar(①________ , df2[″PM2.5″],color=″orange″)for i in range(len(df2)): x=df2.index[i] y=②________#text()方法可以绘制数据标签,语法:text(横坐标,纵坐标,显示内容)plt.text(x, y, '%d' % y)1.近期学校进行了一次技术学考模拟考试,教师将各班级的部分同学数据录入了“考试成绩.xlsx”文件中(如图a 所示),为了根据学生成绩评定等级,教师特地编写了一个 Python 程序。(1)观察图 a,下列关于“考试成绩.xlsx”中数据存在的问题以及对应的解决方式中,正确的是________。(多选题,多选,错选均不得分,漏选得 1 分)A.数据重复应在进一步审核的基础上进行合并或删除等处理B.数据缺失将上一条数据记录中的数据复制C.格式不统一进行数据转换,形成统一格式D.逻辑错误再次访问数据源,验证数据是否正确(2)在解决数据问题后,进行进一步数据处理,要求如下:a.按照等级评定规则,若学生成绩大于等于 85 分,则等级为优秀,否则等级为合格;b.统计各班级的优秀人数,生成柱形图(如图 b 所示)。现编写程序如下,请在划线处填入合适的代码:import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] #绘图时正常显示中文标签plt.rcParams['axes.unicode_minus']=False #绘图时使用 Unicode 字符df=pd.read_excel('考试成绩.xlsx')for i in range(len(df)): if ①________: df.at[i, ″等级″]=″优秀″ else: df.at[i, ″等级″]=″合格″df=②________ #筛选出等级为优秀的学生g=df.groupby(″班级″, as_index=True).count()plt.title(″各班级优秀人数″)plt.③________ #显示图例plt.show()(3)若要生成如图 b 所示的图表,加框处的代码应为下列选项中的________。(填字母)A.plt.bar(x,y,label=″优秀人数″)B.plt.bar(g.班级,g.等级,label=″优秀人数″)C.plt.bar(g.index,g.等级,label=″优秀人数″)D.plt.bar(df.index,df.等级,label=″优秀人数″)2.为了完善某学校食堂管理、持续提高食堂服务质量,让全校师生更加精神饱满地开展工作、学习,对学校食堂进行了一些调查,调查项目共 5 项(具体内容略)。学校后勤管理谢老师收集了 12 个班级的调查结果,分别存储在“dy01.csv”、“dy02.csv”、... 、“dy12.csv”等 12 个文件中(如图 a 所示),每个文件部分界面如图 b 所示。现需要分析 12 个班级学生对这 5 个问题的选“A”情况。谢老师用 Python 的 pandas模块编写了以下代码,实现相关问题的解决。请回答下列问题。(1)定义了 fun_A()函数实现了统计某个班级 5 个问题的选“A”的人数情况。Python程序代码如下,请在划线处填入合适代码。import pandas as pddef fun_A(file): df=pd.read_csv(file) A_list=[] for i in df.columns[1:]: j=c=0 while j if ________ : c+=1 j+=1 A_list.append(c) return A_list(2)调用上述函数,处理 12 个班级每个问题的选“A”的总人数,Python 程序代码如下,请在划线处填入合适代码。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 #每个问题选 A 的人数 for j in range(12): ②________ y[i]=s(3)经上述处理后,接着以图的形式汇报结果(如图 c 所示),Python 程序代码如下,请回答下列问题。import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']#图表显示中文字体plt.title(″每个问题选 A 的总人数″)__________plt.legend()plt.show()划线处代码合适的是________。(单选,填字母)A.plt.bar(x,y)B.plt.bar(x,y,label='A 选项')C.plt.plot(x,y)D.plt.plot(x,y,label='A 选项')(4)调查数据的有效问卷共 550 份,从图 c 中可以观察出有________(填数字)个问题的选“A”总人数低于 60%。3.小王收集了 2022 年城市 A 全年每天的部分天气数据,保存在“2022 天气.xls”文件中,部分数据如图a 所示。(1)为统计 2022 年全年晴、阴、雨……的天数,编写了如下的 Python 程序:import pandas as pdimport matplotlib.pyplot as pltdf=pd.read_excel('2022 天气.xls')g=____________print('2022 年城市 A 天气情况统计如下:')for x in g.index: print(x+':' +str(g[x])+'天')程序运行结果如图 b 所示,则划线处应该填入的代码为________。(单选,填字母)A.df.groupby('天气情况')['日期'].sum()B.df.groupby('天气情况')['日期'].count()C.df.groupby('天气情况').mean()D.df.groupby('天气情况').count()(2)统计 2022 年城市 A 每月平均气温并绘制线形图,部分 Python 程序如下,请在划线处填入合适的代码。s=[0]*12avg=[0]*12 #存储每月平均气温mdays=[0]*12x=[1,2,3,4,5,6,7,8,9,10,11,12]df['平均温度']=(df['最低温度']+df['最高温度'])/2for i in range(365): ①________ s[int(month)-1]+=df.at[i,'平均温度'] mdays[int(month)-1]+=1for i in range(12): avg[i]=round(②________,1)y=③________plt.plot(x,y) #绘制线形图#设置绘图参数,显示如图c 所示线形图,代码略。(3)由图 c 可知,2022 年城市A 最冷和最热的月份分别是________。4.小明为了研究某地近十年每月的温差变化,编写Python程序。以2023年4月为例,该月每天的温度数据分别保存在以8位日期字符串命名的excel文件中,部分文件如图a所示,每个文件记录了一天24小时的温度数据,如图b记录了4月28日的数据。(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所示,请在划线处填入代码。def 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))5.某网站服务器五月(31 天)的后台访问记录保存在 log.xlsx 文件中,如图a所示:请回答下列问题:(1)定义 oneday 函数,功能为:读取日期为 day 的访问记录,将访问地区依次保存在列表 city 中,并返回该列表。函数代码如下:import pandas as pddf=pd.read_excel('log.xlsx')def oneday(day): city=[] for i in ____________: if df.at[i,″时间戳″][0:2] == day: city.append(df.at[i,″地区″]) return city划线处代码为:__________(单选:A.df.index()/B.df.index/C.df.values()/ D.df.values)。(2)统计该月每天华东五市的访问数据,并绘制线型图,部分 Python 程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as plteastcity = [″上海″,″南京″,″杭州″,″苏州″,″无锡″]x=[i for i in range(1,32)]y=[]t=0for i in range(1,32): ①________ if i < 10: day=″0″ + day city=oneday(day) for j in city: if j in eastcity: ②________ y.append(t) t=0plt.plot(③________)plt.show()(3)由图b可知,该网站本月访问量低于 4 万次天数共有__________天。6.某市中考体测规定,考生要在 6 个体育项目中选 3 个进行测试,少选或多选的同学不符合报名要求。全市 1 万多名考生的报名结果(1 表示选择该项目)保存在文件“tycs.csv”中,如图 a 所示。请回答下列问题:(1)下列有关数据处理的说法正确的是________。(多选,填字母)A.在对数据进行处理前要进行数据整理,解决数据缺失、数据异常、逻辑错误等问题B.编程处理数据能提高数据分析和挖掘的效率,目前只能采用 Python 语言实现C.文本数据处理一般过程包括分词、特征提取、数据分析、结果呈现D.需要将某个整体中各部分的大小和比例进行可视化展示时,可采用饼图、环形图等E.可使用公式“=SUM(D5,I5)”对 Excel 中第 5 行D 列至I 列中的数据进行求和(2)定义函数 filter_data 功能为:读取某市报名的 csv 文件,返回该市所有报名符合要求(在6 个体育项目中选择3 个)的学生信息。函数代码如下,划线处应填入的代码为__________。import pandas as pddef filter_data(datafile): df=pd.read_csv(datafile) #读取文件 datafile 中的数据 df['合计']=df.count(axis=1) - 3# count 函数统计每行中非空数据的个数 df1=____________________ return df1(3)统计该市每个组合报名的人数并绘制柱形图,如图b 所示,其中各体育项目名称用相应字母(A~F)代替。部分 Python 程序如下,请在划线处填写合适的代码。import matplotlib.pyplot as pltdf=filter_data('tycs.csv')d={'A': '800 米跑', 'B': '跳绳', 'C': '游泳', 'D': '引体向上', 'E': '掷实心球', 'F': '立定跳远'}result = {}for i in df.index: ①________ for key in d: t=df.at[i, d[key]] if t==1: choice += key if choice in result: ②________ else: result[choice] = 1x=result.keys() #获取字典 result 的键y=result.values() #获取字典 result 的值plt.bar(x, y) #绘制柱形图# 设置绘图参数,显示如图 b 所示柱形型图,代码略(4)由图b 可知,报名人数最多的组合为__________________________(填写体育项目的名称)。(共70张PPT)课时3 利用Pandas模块处理数据第四章 数据处理与应用1.小明收集了某超市部分商品 2022 年上半年每天的价格数据并保存在 "data.xlsx“文件中,如图 a 所示。要分析某商品一个月内的价格稳定情况,需要将本月每天(除第一天外)价格波动的绝对值加起来(价格波动=当天价格-前一天价格),其值越小,价格越稳定。为统计该超市 6 月份各商品价格稳定情况,编写如下 Python 程序。请回答下列问题:(1)获取 6 月份各商品的价格,划线处填入的代码为 。(多选,填字母) A.df[df["日期"] >=20220601]B.df["日期" >=20220601]C.df[df.日期 >=20220601]D.df[df["日期"]] >=20220601import pandas as pddf=pd.read_excel("data.xlsx")df= df=df.reset_index(drop=True) #重新设置索引,从 0 开始递增(2)绘制6月份价格稳定情况线形图,部分Python程序如下,请在划线处填入合适代码。import matplotlib.pyplot as pltcols=df.columns[1:] #存储各商品名称n=① m=len(cols)diff=[0]*mfor i in range(m): s=0 for j in range(1, n): day_diff=abs(df[cols[i]][j]-df[cols[i]][j-1]) #计算每天价格波动 s+=day_diff ② x,y=cols,diffplt.plot(③ ) plt.show()(3)由图 b 可知,该超市 6 月份各商品价格最稳定的是 。(单选,填字母) A.商品 A B.商品 BC.商品 C D.商品DE.商品 E答案 (1)AC (2)①len(df) ②diff[i] = s ③x,y (3)B(1)从图a的skcj.xlsx文件,可提取出每位选考技术同学的技术成绩,在划线处填写相关代码。import pandas as pddf=pd.read_excel("skcj.xlsx")df['技术赋分']=0 #增加一列用来存放技术成绩for i in range(len(df)): for j in range(1,4): if df.at[i, '科目' + str(j)] == '技术': df.at[i, '技术赋分']= break(2)因表彰需要,降序显示成绩前 n 名的同学,由于可能出现同分,实际显示人数可以超过 n,显示结果如图b。n=5#设定表彰人数 ndf=df.sort_values(① ) index=df.index[n - 1]score=df.at[index, '技术赋分'] #求出表彰的最低分数线df2=② print(df2[['姓名','技术赋分']])(3)编写代码绘制如图 c 所示图表,其中有① 个班优生(>=85分)人数超过 10 人,为实现该功能,下面划线处的代码应选择② 。(多选:填字母) A.plt.bar(g.班级, g.技术赋分)B.plt.bar(g['班级'], g['姓名'])C.plt.bar(g.index, g.技术赋分)D.plt.bar(g.index, g['姓名'])#找出df中技术优生(>=85分),并另存为 df1(代码省略)g=df1.groupby('班级').count()import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']plt.title('技术优生人数统计') #多选题 plt.show()答案 (1)df.at[i, "科目"+str(j)+ "赋分"]或df["科目"+str(j)+"赋分"][i] (2)①"技术赋分",ascending= False ②df[df.技术赋分>=score]或df[df["技术赋分"]>=score] (3)①2 ②CD3.为统计分析不同年级学生名字中的常用字,小王同学收集了本校所有学生的名字,并以入学年份为文件名分别保存在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.rcParams [ 'font.sans-serif']=[ 'SimHei']#图表显示中文字体plt.title(xb +"生取名常用字")plt.bar(df3.字, ) plt.show()(4)由图c可知,全校女生名字中出现过30次以上的字有 (填数字)个。 答案 (1)①df.at[i,"性别"]==xb或df["性别"][i]==xb 或df.性别[i]==xb ②mz (2)D(3)df3.个数或 df3["个数"] (4)6解析 本题考查利用Pandas进行数据统计。(1)①找出同性别学生中的每个字,因此索引i的学生性别与函数参数xb相同。②将所有的字存储在列表mz并返回。(2)字典存储姓名中的字,利用该字典创建一个包含"字"和"个数"两列的DataFrame对象,并按字进行分组统计,字是分组的标准,统计的结果在个数列,统计出现最频繁的10个字,需对个数列降序排序。(3)每个字的数量保存在个数列中。(4)略。4.收集某地2022年全年的天气数据,按日期顺序储存在“tqqk.xlsx”文件中,部分界面如图a所示。为计算每月空气质量为优的日期中的平均温差。编写Python程序,请回答下列问题:(1)计算并筛选出空气质量为优的记录信息,Python程序段如下,请在划线处应填入合适的代码。import pandas as pddf=pd.read_excel("tqqk.xlsx")df["温差"]=df["最高温度"]-df["最低温度"]dfy= dfy=dfy.sort_values("日期",ignore_index=True)(2)计算满足条件的日期中的平均温差。并绘制线形图,部分Python程序段如下,请在划线处填入合适的代码。import matplotlib.pyplot as plti=0avewc=[] #月平均温差while i j=i+1 tot=dfy.at[i,"温差"] while j<=len(dfy)-1 and dfy.at[i,"日期"][5:7]==dfy.at[j,"日期"][5:7]: ① j+=1 avewc.append(round(tot/(j-i),2)) ② x=['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']y=③ plt.plot(x,y,label="月平均温差")#设置绘图参数,显示如图b所示线型图,代码略(3)由图b可知,月平均温差超过8的月份共有 个。 答案 (1)df[df.空气质量=='优'] (2)①tot+=dfy.at[j,"温差"] ②i=j ③avewc (3)65.为了解学生在食堂和校园超市的消费情况,学校把 9 月 1-4 日各个窗口的消费数据导出并保存在“eat. xlsx”文件中,数据格式如图a所示。如图b所示,1-14 号窗口为食堂一楼,15-28 号是食堂二楼,29-34号是校园超市。用Python读取该文件并作数据分析后输出如图c所示结果,请回答下列问题。(1)读入数据后,需要将数据集 df 中的数据按窗口号设置相应的位置信息:#引用 pandas 及 matplotlib,并设置参数,代码略df=pd.read_excel('eat.xlsx')df['位置']='' #增加'位置'列,初始值为空for i in ① : if df['窗口'][i] <=14: df['位置'][i]='食堂一楼' elif ② : df['位置'][i]='食堂二楼' else: df['位置'][i]='校内超市'划线①处应填写代码: (单选,填写字母:A. df.index /B. df.columns /C. df.values);划线②处应填写代码: 。 (2)完成窗口号设置后,统计各个位置的金额总和,代码如下:a=['校内超市','食堂一楼','食堂二楼']b=[0,0,0] #存储各个位置的消费总金额for x in df.values: for i in range(3): if x[5] == a[i]: ① plt.bar(② ) #输出如图c所示图表 plt.show()划线①处代码为: ,划线②处代码为: 。 (3)观察图c可知,消费总金额最多的位置是 。(单选,填字母) A.校内超市 B. 食堂一楼 C. 食堂二楼答案 (1)①A ②df['窗口'][i] <=28 (2)①b[i] +=x[3] 或 b[i]=b[i]+x[3] ②a,b (3)C解析 (1)①变量i表示df的行索引。②15-28表示食堂二楼,因此在不满足第一条件情况下,只要小于等于28即可。(2)①变量x表示df.values一行数据,其中x[3] 消费金额,x[5]表示消费位置。对相应的楼层消费金额进行累加。②图表的横轴为消费楼层,纵轴为各楼层消费金额。(3)略。6.小陈在气象部门得到了一份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] 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平方米的光伏发电板共① 块。 (日均发电量=电池板的容量/块×块数×平均日照时数×充放电效率)建设光伏发电设备前要先获得当地的平均日照时数情况,小陈通过如下代码获取相关数据。res=df[df["城市名"]=="温州市"]res=res.values[0][1:13].② print("温州市月平均日照最小值为”,res)答案 (1)计算每个城市的年度平均日照时数 (2)C (3)①52 ②min()7.某单位正式员工的基本工资计算公式为:基本工资=岗位工资+薪级工资,如图a和图b,分别对应salary1.xlsx文件和salary2.xlsx文件。员工入职单位一年后转正,定岗位等级为十三级,根据学历定起始的薪级,中专2级、大专5级、本科7级、硕士11级、博士14级。转正定级后,薪级每年增加一级。为统计分析该单位员工的工资情况,编写Python程序。请回答下列问题:(1)定义岗位工资和薪级工资标准查询的两个函数。gwgz函数功能为:读取salary1.xlsx文件,根据岗位等级m,返回对应的工资标准,例如m=“十三级”,gwgz(m)=1585。函数代码如下,划线处应填入的代码为 。(单选,填字母) A.df1.'岗位等级'[i]==mB.df1[岗位等级][i]==mC.df1['岗位等级'][i]==mD.df1[i]['岗位等级']==mimport pandas as pd def gwgz(m): df1=pd.read_excel('salary1.xlsx') for i in df1.index: if : return df1.at[i, '工资标准']xjgz函数功能为:根据薪级等级n,返回对应的工资标准,例如n=10,xjgz(n)=661,代码略。(2)现有员工信息表info.xlsx,所有员工都已经过了实习期,如图c。统计各学历的人数和基本工资的平均值,编写Python程序。请回答下列问题:import datetimedic={'中专':2,'大专':5,'本科':7,'硕士':11,'博士':14}time=datetime.date.today() #获得当前的年月日now_year=time.year #获取年份now_month=time.month #获取月份df=pd.read_excel('info.xlsx')for i in df.index: station=df.at[i, '岗位等级'] past_year=int(df.at[i, '入职年月'][:4]) past_month=int(df.at[i, '入职年月'][5:]) if now_month >=past_month: grade=now_year-past_year-1 else: grade=now_year-past_year-2 grade +=① df.at[i, '基本工资'] =② #计算员工的基本工资 #对各学历的员工计算平均基本工资和统计人数df1=df.groupby('学历',as_index=False).agg({'基本工资':'mean','姓名':'count'}) #修改列名df2=df1.rename(columns={'基本工资': '平均工资', "姓名": "人数"}) #图表对象初始化,代码略ax1.bar(df2.学历, df2.平均工资, label="平均工资") #绘制柱形图ax2.plot(df2.学历,③ , label="人数") #绘制线形图fig.legend()plt.show()(3)目前该单位平均工资为3867.33元,由图d可知,学历为 的员工,他们的平均工资与公司平均工资相差最大。 答案 (1)C (2)①dic[df.at[i,'学历']] ②gwgz(station)+xjgz(grade) ③df2.人数 (3)博士解析 本题考查Pandas数据处理。(1)根据岗位等级m,返回对应的工资标准。(2)①grade表示工作年限,其值为参加工作时间加上学历时间(读大学的年数)。②计算员工的基本工资,基本工资=岗位工资+薪级工资 。③线性图的纵轴为人数。(3)略。8.小红从网上下载收集了浙江省部分海岛2022年10月-12月的天气预报信息,存储在Excel文件中,包含预报时间、站点编号、浪高、温度、风向以及风速,如图a所示,海浪等级信息如图b所示,她要编写一个Python程序快速对海岛天气数据进行分析。浪高值 风浪等级0 无浪1-10 微浪10-25 小浪25-100 中浪>100 大浪图b(1)为了获取该数据集中预报信息最多的海岛站点编号及该岛某月各风浪等级的预报次数,小红需要对图a所示的表中数据进行整理,下列说法正确的是 。(多选,填字母) A.第4行和第5行数据重复,删除其中一行即可B.通过检测发现D7单元格的数据存在错误,应进行修正C.删除“风向”和“风速”两列数据,不影响分析结果D.“浪高”为0的数据没有任何价值,可以直接删除(2)小红利用整理好的数据,编写并运行程序,求出预报信息最多的海岛站点编号并根据给定月份,分析该月的数据并可视化,可视化结果如图c所示,请在划线处填入合适的代码。import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['KaiTi','SimHei','FangSong'] #设置中文字体显示df=pd.read_excel("浙江省海岛预报信息.xls")def zhengli(): #整理数据 df["风浪等级"]="无浪" for i in df.index: t=df["浪高"][i] if t>100: df["风浪等级"][i]="大浪" elif t>25: df["风浪等级"][i]="中浪" elif t>10: df["风浪等级"][i]="小浪" ① : df["风浪等级"][i]="微浪"for i in df. index: #截取"预报时间"列中的月份日期信息,添加到"月份"列和"日期"列 df.at[i,"月份"]=str(df.at[i,"预报时间"])[5:7] df.at[i,"日期"]=str(df.at[i,"预报时间"])[8:10]zhengli()df1=df.groupby(② , as_index=False).count() df1_sort=df1.sort_values("预报时间" , ascending=False,ignore_index=True)top=df1_sort["站点编号"][0]print("预报信息最多的海岛站点编号是:", top)df2=df[df.站点编号==top]m=input("请输入要查询的月份:")df3=③ df3=df3.groupby("风浪等级").预报时间.count()x=df3.indexy=df3.valuesplt.plot(x,y)#设置绘图参数,绘制如图c所示线形图,代码略。(3)观察图c图表可知,该海岛12月出现天数最多的风浪等级为 。 答案 (1)BC (2)①elif t>=1或elif t>0 ②"站点编号" ③df2[df2.月份==m] (3)微浪9.小明收集了某学校某次模考技术成绩的数据,存储在文件“cj.xlsx”中,其中“xx1”表示信息选择题1,共12个选择题。每小题的分值是2分,如图a所示。各班吻合度偏差较大人数统计如下:1班3人2班7人3班7人4班11人5班5人图b(1)从图a中第一行数据看,该行数据存在的问题是 。(单选,填字母) A.数据缺失 B.逻辑错误C.格式不一致 D.数据异常(2)技术学科包含信息技术与通用技术,需要我们关注学科的平衡,而衡量学科平衡的重要指标是学科吻合度,采用得分差来判断(3分一级:0~2分为0级偏差,3~5分为1级偏差,以此类推),现需要编写Python程序计算吻合度偏差值,并统计各班偏差较大的人数(吻合度>=3),输出结果如图b所示。代码如下,请在划线处填入合适的代码。import pandas as pdplt.rcParams["font.sans-serif"]=["SimHei"]df=pd.read_excel("cj.xlsx")df=df[df.技术!=0]n=len(df)info=[]bjc={1:0,2:0,3:0,4:0,5:0} #存储各班吻合度>=3的人数for i in range(n): info.append([df.班级[i],df.姓名[i],df.信息[i],df.通用[i]]) diff=info[i][2]-info[i][3] info[i].append( ① ) print(info[i][0],"班",info[i][1],"吻合度级别:",info[i][4]) if info[i][4]>=3: ② print("各班吻合度偏差较大人数统计如下:")for bj in bjc: print(bj,"班",bjc[bj],"人")(3)想知道12个信息技术选择题的难度系数(难度系数=平均分/分值),选出错误率最高的5个小题。小明编写程序如下,求各题的难度系数并给错误率最高的5个小题绘制了如图c所示的柱形图。import matplotlib.pyplot as pltdif=[]for i in df.columns[5:]: dif.append(round( ① /2,2)) dic={"题号":df.columns[5:],"难度系数":dif}df1=pd.DataFrame(dic)df1=df1.sort_values("难度系数")plt.figure(figsize=(8,4))plt.title("信息难度最大的5道题对比图")plt.bar(② ) plt.xlabel("题号")plt.ylabel("难度系数")plt.show()答案 (1)B (2)①abs(diff)∥3 ②bjc[info[i][0]]+=1 (3)①df[i].mean() ②df1.题号[0:5], df1.难度系数[0:5]解析 (1)数据存在的问题主要有数据缺失、数据重复、数据异常、逻辑错误、格式不一致等。选择题每题的分值为2属于逻辑错误。(2) ①计算得分差来判断。3分一级:0~2分为0级偏差,3~5分为1级偏差,以此类推。②统计吻合度。info[i][0]存储为班级,字典bjc存储各班的吻合度,依次遍历每位同学的数据,若吻合度>=3,相应班级计数加1。(3)①计算各题平均分。表达式i in df.columns[5:],i为列标签,难度系数=平均分/分值,统计该列的平均分为df[i].mean()。②制作图表数据源,两列数据为题号和难度系数,有题意可知取前5,所以此空为df1.题号[0:5], df1.难度系数[0:5]。10.学校暑期开展“青春迎亚运”活动,邀请高二学生每日参加运动锻炼并进行线上打卡。每周收集一次相关数据,分别保存在相应的xlsx文件中,部分文件如图a所示;每个文件记录了一周7天的打卡数据,示例如图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所示,由图可知,该周参与人气最高的运动项目为 。 答案 (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)略。11.小明通过调查问卷收集了食堂满意度情况数据,保存在“data.csv”文件中,如图a所示。为统计分析每个调查项目不同选项的人数及不满意率,编写Python程序。请回答下列问题:(1)统计每一项调查内容的总票数、满意、一般及不满意人数,程序运行结果如图b所示,请在划线处填入合适的代码。import pandas as pd #导入 pandas 模块import matplotlib. pyplot as plt #导入 pyplot 模块plt. rcParams["font. sans-serif"]=["SimHei"] #设置图表显示中文字体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所示,请在划线处填入合适的代码。df2["不满意率(%)"]=① x=② y=df2["不满意率(%)"]plt.figure(figsize=(8,4))pl.title("食堂调查问卷不满意率(%)情况")plt.bar(x,y,label="不满意率(%) ")plt.legend()答案 (1)①colname ②dfc.at[j,"序号”]或dfc["序号”][j]或dfc.序号[j] (2)①df2["不满意"]/df2["总票数"]*100或df2["不满意"]/po1l*100或df2.不满意/df2.总票数*100或df2.不满意/pol1*100或其它等价答案 ②df2["调查项目"]或df2.调查项目12.小王收集了所在学校高三年级一周预定套餐数据,保存在“yzte.xlsx” 文件中,部分数据如图a所示。编写Pyhon程序,分析高三各班一周各套餐预定情况,确定各班“班级最喜爱的套餐”和“校一周预定套餐之王”。(1)读取 EXCEL文件“yzte.xlsx”中的数据,统计高三各班套餐一周的预定量,输出统计结果,格式如图b 所示。下列划线部分应依次填写 。(单选,填字母) A.groupby('班级')[columns].sum()B.groupby('班级',as_index=False).sum()C.groupby('班级')[columns].count()D.groupby('班级',as_index=False).count()import pandas as pddf=pd.read_excel(' yzte.xlsx')columns = df.columns[3:]df=df. print(df)(2)每班一周套餐预定量最多的套餐为本班“班级最受欢迎的套餐”,统计每种套餐被各班列为“班级最受欢迎”的班级数量。请为下面划线部分填写合适代码。df["班级套餐之最"] = df.max(axis=1)result ={};count ={}for index in df.index : for column in columns: if df["班级套餐之最"][index]==① : if column in result : result[column].append(index) count[column] += 1 else: result[column] =② count[column]=1df1=pd.Series(count)(3)根据第(2)小题的统计结果,绘制如图c所示图表,由图可知,“校一周预定套餐之王”为① 下列是部分绘图代码,请在划线处填写合适代码。import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"]=["song Ti"]plt.title("一周预定套餐之王判定图")plt.bar(count.keys(),② ) plt.show()答案 (1)A (2)①df[column][index]②[index] (3)①套餐A ②count.values 展开更多...... 收起↑ 资源列表 课时3 利用Pandas模块处理数据 学案 浙教版(2019)必修1.doc 课时3 利用Pandas模块处理数据 教案 浙教版(2019)必修1.doc 课时3 利用Pandas模块处理数据 课件(共155张ppt)浙教版(2019)必修1(上).pptx 课时3 利用Pandas模块处理数据 课件(共155张ppt)浙教版(2019)必修1(下).pptx