中小学教育资源及组卷应用平台
2024信息技术学业水平考试专题练
优化集训15 pandas处理数据
1.下列有关pandas-Series的说法错误的是( )
A.包含一个数组的数据和一个与数据关联的索引,是二维数据结构
B.其索引值默认是从0起递增的整数
C.可用列表、字典等创建Series数据结构
D.其索引可以指定,类型可以为字符串型
2.下列有关pandas-DataFrame的说法错误的是( )
A.是一种二维数据结构
B.由1个索引列和若干个数据列组成
C.同一个DataFrame对象的数据列类型必须相同
D.可看作共享同1个index的Series集合
3.不能实现选取df对象前5行数据记录的语句是( )
A.df.head() B.df.head(5)
C.df[0:5] D.df[5]
回答下列第4~6题。
4.某DataFrame对象df中包含“准考证号”“班级”“姓名”“文”“数学”…“总分”等10个数据列、多个数据行,能获取对象df第3个数据的“姓名”内容的语句有( )
①df[2,'姓名'] ②df.at[2,'姓名'] ③df[2]['姓名'] ④df['姓名'][2] ⑤df.姓名[2]
A.①②③ B.①②④
C.②④ D.②④⑤
5.如第4题对象df,能够降序排列输出总分大于等于600分的学生数据的代码组合是( )
①df=df.sort_values(″总分″,ascending=True)
②df=df.sort_values(″总分″,ascending=False)
③df=df[″总分″,>=600]
④df=df[df[″总分″]>=600]
⑤print(df)
A.①③⑤ B.①④⑤
C.②③⑤ D.②④⑤
6.如第4题对象df1,下列语句中,可以以班级为单位,统计出各班级“总分”的平均值的有( )
①df.groupby('班级').mean()
②df.groupby('总分').mean()
③df.groupby('班级')['总分'].mean()
④df.groupby('班级').总分.mean()
⑤df.groupby('班级').describe()
A.①②③④⑤
B.①②③⑤
C.①③④⑤
D.①②③
7.有如下Python程序段。
import pandas as pd
list=[['周欣怡','湖州',15,646],['王培新','杭州',16,598],['张佳明','杭州',16,609],['林逢春','嘉兴',15,547],['朱梁栋','湖州',16,588],['陈清瑞','嘉兴',15,571]]
inf=pd.DataFrame(list,columns=['姓名','地区','年龄','总分'])
print(inf)
print('_' 20)
print(inf.groupby('地区',as_index=True).mean())
执行该程序段后,输出的结果是 (单选,填字母)。
8. 模块用于科学计算(随机数、数组运算等); 模块基于numpy实现,主要用于数据的处理和分析; 用于绘图库。
9.小明从某网站上收集了2022年4月部分生产资料市场价格变动情况数据,数据集保存在“shuju.xlsx”中,格式如图a所示。
图a
为分析相关类别生产资料的涨跌幅情况,小明编写了以下Python程序。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文字体
df=pd.read_excel(″shuju.xlsx″)
df[″涨跌幅″]=
(1)通过数据计算添加涨跌幅列,请在划线处填写实现的方式。
计算公式为:涨跌幅=(本期价格-上期价格)/本期价格 100。
(2)若要对表格中的数据进行分类统计,并求其平均涨跌幅。请完善以下代码:
g=df.groupby(″类别″,as_index=False)
df1=
df1=df1.sort_values(″涨跌幅″,ascending=False)
(3)根据上述操作结果,制作一份显示类别涨跌幅平均值的图表,其格式如图b所示。
各种类别对比分析图
图b
请完善以下代码。
plt.figure(figsize=(8,4))
plt.title(″各种类别对比分析图″)
plt.bar(① ,df1[″涨跌幅″],label='涨跌幅')
plt.xlabel(″类别″)
plt.ylabel(② )
plt.legend()
plt.show()
10.某市普通高中选课数据如下图所示,学生从技术、化学、生物等科目中选择三门作为高考选考科目,“1”表示已选择的选考科目。
图a
各学校技术选考人数对比
图b
为分析各学校的学生选科数据,编写了如下程序:
import pandas as pd
import matplotlib.pyplot as plt
plt.rc'font', {'family':'SimHei'}
plt.rcParams['axes.unicode_minus']=False
df=pd.read_csv(″xk73.csv″)
(1)若要了解市里所有选考技术的学生情况,请在划线处给出合适代码,筛选出有选技术科目的同学信息:
print( )
(2)使用Python编程分析每所学校各科目选考的人数(不同的学校代码表示不同的学校)。请在划线处填入合适的代码。
g=df.groupby(① ,as index=false) #按学校进行分组
s2=② #按学校分别统计各科目的选考人数
s2.sort_values(″技术″,ascending=False) #按技术选考人数进行降序排序
(3)若要做一个各学校技术选考人数的分析,添加如下程序段:
plt.figure(figsize=(10,5))
a=list(s2.学校代码)
plt.xticks(range(1en(s2.学校代码)),a,rotation=45) #将各学校代码按降序顺序显示在x轴上
p1t.① (range(len(s2.学校代码)),② ) #对各学校及对应技术选考人数进行绘图
plt.xlabel(″学校″)
plt.ylabel(″技术选考人数″)
plt.title(″各学校技术选考人数比对″)
plt.show()
划线处的代码应为 (单选,填字母)。
A.①barh ②df.技术
B.①plot ②df.技术
C.①bar ②s2.技术
D.①scatter ②s2.技术
11.黄老师获取了学校高三年级学生某次考试数据,并使用Excel软件、Python程序进行数据处理,如图所示。
(1)Excel文件“exam.xlsx”中的数据为 (选填:结构化数据/半结构化数据/非结构化数据)。
(2)黄老师将文件存储为“exam.xlsx”,并编写了如下Python程序对数据进一步分析。请将划线处代码补充完整。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel(″exam.xlsx″)
#统计年级物化生政史地技各个科目的选课人数(本次考试无人缺考)
for i in df.columns[5:12]:
km=i
renshu=df[km].count()
print(″选″,km,″的人数为:″,renshu)
#制作年级男女生语文平均分对比图表
df2=df.groupby(″性别″,as_index=False).
①
plt.bar(df2.性别,② )
plt.③ (″男女生语文平均分比较″)
plt.xlabel(″性别″)
plt.ylabel(″语文平均分″)
plt.show()
12.某地区要对辖区内高中学生的高考选科情况进行统计,前期先用Excel收集各个学校每个学生的选科数据,界面如图所示。
用Python处理上述Excel文件,统计每个学校各个学科的选科情况,并用图表展示学生人数最多的5个学校的物理学科与政治学科人数,代码如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df=pd.read_excel(″xk73.xlsx″)#读数据到pandas的DataFrame结构中
sc=df.groupby(① ,as_index=False).count()#按学校分组计数
sc=sc.drop('姓名',axis=1)#删除“姓名”列
sc=sc.rename(columns={'学生编号':'总人数'})
#修改“学生编号”为“总人数”
sc_sort=sc.sort_values(″总人数″,ascending=False)
#对分组计数结果进行排序
x=np.arange(1,6)#产生列表[1,2,3,4,5]
y1=sc_sort.head()[″物理″]
②
plt.figure(figsize=(8,4))
plt.bar(x-0.2,y1,label=″wuli″,width=0.4)
plt.bar(x+0.2,y2,label=″zhengzhi″,width=0.4)
plt.ylim(50,400)
plt.legend()
df_sum=pd.DataFrame(data=sc.sum()).T
df_sum['学校代码']='合计'
③ #显示图表
result=sc.append(df_sum) #增加“合计”行
result.to_excel(″学校人数统计.xlsx″)#保存结果
在划线处填写合适代码,完善程序。
优化集训15 pandas处理数据
1.A 解析 是一维数据结构。
2.C 解析 同一个DataFrame对象的不同数据列类型可以不同。
3.D 解析 head(n)函数返回DataFrame前n行数据,若不设置参数n,则默认返回前5行。df[0:5]选取df对象前5行数据,df[5]选取df对象第6列数据。
4.D 解析 可以通过at方法获取DataFrame对象单个数据值,格式为df.at[index,column],所以②正确;或者根据列标题先获取整列,然后通过行索引获取单个数据值,其中获取一列数据可以通过字典记法或属性检索,第三行数据的行索引是2,所以④⑤均正确。
5.D 解析 sort_values()函数中,参数ascending,默认值为True,表示升序,为False时是降序;对于DataFrame对象,可以通过布尔型数据选取满足条件的行,正确写法为df[df[″总分″]>=600];最后通过语句⑤输出结果。
6.C 解析 统计各班级学生“总分”平均值需要按照“班级”分组计算。
df.groupby('班级').mean()#按“班级”分组,计算各纯数值列平均值。
df.groupby('总分').mean()#按“总分”分组,计算各纯数值列平均值。
df.groupby('班级')['总分'].mean()#按“班级”分组,并选取“总分”列计算平均值。
df.groupby('班级').总分.mean()#按“班级”分组,并选取“总分”列计算平均值。
df.groupby('班级').describe()#按“总分”分组,计算各纯数值列的平均值、最大值等统计数据。
7.B 解析 as_index:为True时自动把第1列作为了index,为False时默认索引0、1、2…。
8.numpy pandas matpoltlib
9.(1)(df.本期价格-df.上期价格)/df.本期价格 100
(2)g.mean() (3)①df[″类别″]或df.类别 ②″涨跌幅″
解析 (1)根据数量关系确定计算公式。
(2)计算平均值使用mean()函数。
(3)①观察题图b可知需要填横坐标数据来源。②此处需要填写横坐标y的标签(ylabel),由题图可知应该是“涨跌幅”。
10.(1)df[df.技术==1](或df[df[″技术″]==1]) (2)①″学校代码″ ②g.sum()或g.count() (3)D 解析 本题考查pandas及绘图模块知识。(1)Dataframe中,要对某列进行筛选(查找并显示符合条件的值),可以通过df[df[″技术″]==1]或df[df.技术==1]来实现。(2)此处考查pandas中分组函数groupby的用法。依题意,本条语句按学校进行分组,分组的字段名应为“学校代码”,故①处填″学校代码″;①处代码已将分组后的对象赋值组变量g,②空对其进行计数,故填:g.count()。(3)观察题图b,可知当前是散点图(scatter),故选D。
11.(1)非结构化数据 (2)①mean() ②df2.语文 ③title
解析 (1)Excel中的数据是属于结构化数据(每列数据类型均统一)。(2)①此处求平均值,因此使用mean()函数。②根据性别分组后,df2对象中‘语文’列存放了男女生语文成绩平均分,创建柱形图,x轴为性别,y轴为男女生语文成绩平均分,故答案为df2.语文。③此处显示的标题,因此答案如上。
12.①″学校代码″ ②y2=sc_sort.head()[″政治″](或y2=sc_sort.head(5)[″政治″]) ③plt.show() 解析 本题考查数据处理知识。(1)①题干说明需要“统计每个学校各个学科的选科情况”,所以需要根据“学校编号”分类汇总统计各学校的选科情况,此空填写分组的关键字,答案为“学校代码”。②根据上下文,此空是获取学生人数最多的5个学校的政治学科人数。前面代码段已经根据各学生总人数降序排序,再结合上一段代码,此空只需要将“物理”修改成“政治”。head()函数返回DataFrame的前n个数据记录,如果参数不写,默认参数是5,所以此空答案:y2=sc_sort.head()[″政治″]或y2=sc_sort.head(5)[″政治″]。③代码段plt.show()的功能是显示图形。(2)此空考查对图表结果呈现的辨析。代码段“plt.legend()”,说明最后的结果有图例,排除CD。代码段“plt.ylim(50,400)”,说明y坐标的取值范围是[50,400],所以排除A,选B。
21世纪教育网 www.21cnjy.com 精品试卷·第 2 页 (共 2 页)
21世纪教育网(www.21cnjy.com)