Python数据分析期末考试模拟试卷一、单项选择题每题2分共20分1. 题目在Python数据分析中用于处理多维数组和矩阵运算的核心库是 A. PandasB. MatplotlibC. NumPyD. SciPy解析正确答案是C。NumPy是Python科学计算的基础包提供高性能的多维数组对象和数组运算工具是Pandas、SciPy等库的基础 。2. 题目Pandas中用于创建DataFrame的正确方法是 A. pd.DataFrame(data, columns, index)B. pd.create_dataframe(data)C. pd.make_dataframe(data)D. pd.new_dataframe(data)解析正确答案是A。pd.DataFrame()是创建DataFrame的标准构造函数可以接受字典、列表、数组等多种数据格式并可指定列名和索引 。3. 题目以下哪个函数用于读取CSV文件到DataFrame A. pd.read_csv()B. pd.open_csv()C. pd.load_csv()D. pd.import_csv()解析正确答案是A。pd.read_csv()是Pandas读取CSV文件的专用函数支持多种参数配置如分隔符、编码、缺失值处理等 。4. 题目DataFrame中用于删除包含缺失值行的函数是 A. df.dropna()B. df.remove_na()C. df.delete_na()D. df.clean_na()解析正确答案是A。df.dropna()用于删除包含缺失值的行或列可通过axis参数控制删除方向how参数控制删除条件 。5. 题目以下哪个方法用于对DataFrame按列值排序 A. df.sort()B. df.order()C. df.sort_values()D. df.arrange()解析正确答案是C。df.sort_values()按指定列的值进行排序ascending参数控制升序或降序inplace参数控制是否原地修改 。6. 题目用于计算DataFrame描述性统计信息的方法是 A. df.describe()B. df.stats()C. df.summary()D. df.info()解析正确答案是A。df.describe()生成数值列的统计摘要包括计数、均值、标准差、最小值、四分位数和最大值 。7. 题目以下哪个函数用于将字符串转换为datetime对象 A. pd.to_datetime()B. pd.convert_datetime()C. pd.parse_datetime()D. pd.str_to_datetime()解析正确答案是A。pd.to_datetime()将字符串、整数、浮点数等转换为datetime对象支持多种日期格式 。8. 题目用于数据分组聚合的函数是 A. df.group()B. df.groupby()C. df.aggregate()D. df.pivot()解析正确答案是B。df.groupby()按指定列分组后可接聚合函数如mean()、sum()、count()等进行计算 。9. 题目以下哪个函数用于合并两个DataFrame A. df.join()B. df.merge()C. df.concat()D. df.combine()解析正确答案是B。df.merge()实现类似SQL JOIN的操作支持内连接、左连接、右连接和外连接等多种合并方式 。10. 题目用于创建数据透视表的函数是 A. df.pivot()B. df.pivot_table()C. df.crosstab()D. df.reshape()解析正确答案是B。df.pivot_table()创建数据透视表通过index、columns、values和aggfunc参数定义行、列、值和聚合方式 。二、多项选择题每题3分共15分11. 题目以下哪些是Pandas的核心数据结构 A. SeriesB. DataFrameC. ArrayD. Panel解析正确答案是A、B。Series是一维带标签数组DataFrame是二维表格型数据结构两者是Pandas最核心的数据结构。Panel是三维数据结构但在新版本中已不推荐使用 。12. 题目以下哪些方法可以用于处理缺失值 A. df.dropna()B. df.fillna()C. df.replace()D. df.interpolate()解析正确答案是A、B、D。df.dropna()删除缺失值df.fillna()填充缺失值df.interpolate()插值填充。df.replace()用于替换特定值不是专门处理缺失值的方法 。13. 题目以下哪些是NumPy数组的特点 A. 同质数据类型B. 固定大小C. 支持向量化运算D. 动态类型解析正确答案是A、B、C。NumPy数组要求所有元素类型相同创建后大小固定支持向量化运算无需循环。Python列表才是动态类型的 。14. 题目以下哪些函数可以用于数据可视化 A. plt.plot()B. plt.scatter()C. plt.hist()D. plt.boxplot()解析正确答案是A、B、C、D。Matplotlib的pyplot模块提供多种绘图函数plot()绘制线图scatter()绘制散点图hist()绘制直方图boxplot()绘制箱线图 。15. 题目以下哪些是数据清洗的常见任务 A. 处理缺失值B. 处理异常值C. 数据类型转换D. 数据标准化解析正确答案是A、B、C、D。数据清洗包括处理缺失值填充或删除、处理异常值识别和处理、数据类型转换如字符串转数值、数据标准化如归一化等 。三、判断题每题1分共10分16. 题目df.loc[]基于整数位置索引df.iloc[]基于标签索引。 解析错误。df.loc[]基于标签索引df.iloc[]基于整数位置索引。loc使用行/列的名称iloc使用行/列的整数位置 。17. 题目df.mean()默认计算所有数值列的平均值忽略非数值列。 解析正确。df.mean()默认对数值列int和float类型进行聚合计算自动跳过非数值列如字符串、对象类型 。18. 题目df.to_csv(data.csv)保存DataFrame时默认包含行索引。 解析正确。df.to_csv()默认将行索引作为第一列写入文件可通过indexFalse参数禁用 。19. 题目df.rename(columns{old:new})可以重命名DataFrame的列。 解析正确。rename()方法通过字典映射修改列名或索引名inplaceTrue可原地修改 。20. 题目df.groupby(col).mean()按指定列分组后计算每组所有数值列的平均值。 解析正确。groupby()分组后聚合函数如mean()会对每个分组的所有数值列进行计算 。21. 题目df.isnull()返回布尔型DataFrameTrue表示对应位置是缺失值。 解析正确。isnull()或isna()检测缺失值返回相同形状的布尔DataFrame缺失值位置为True 。22. 题目df.sort_values()默认按降序排序。 解析错误。df.sort_values()默认按升序排序需设置ascendingFalse才按降序排序 。23. 题目df[col].value_counts()返回唯一值计数默认按计数值降序排列。 解析正确。value_counts()统计唯一值出现次数默认按频率降序排列sortFalse可禁用排序 。24. 题目df.corr()计算的是协方差矩阵。 解析错误。df.corr()计算的是相关系数矩阵默认皮尔逊相关系数衡量线性相关程度。df.cov()才计算协方差矩阵 。25. 题目df.pivot_table()和df.pivot()功能完全相同。 解析错误。df.pivot()仅重塑数据长表转宽表不进行聚合df.pivot_table()可指定聚合函数功能更强大 。四、填空题每题2分共20分26. 题目Pandas中用于读取Excel文件的函数是______。解析pd.read_excel()。该函数读取Excel文件需安装openpyxl或xlrd引擎可指定工作表、读取范围等参数 。27. 题目删除DataFrame重复行的函数是______。解析df.drop_duplicates()。删除重复行默认保留第一次出现的行可通过subset参数指定判断重复的列 。28. 题目将DataFrame转换为NumPy数组的方法是______。解析df.to_numpy()或df.values。返回NumPy数组如果列数据类型不一致结果数组类型为object 。29. 题目检查DataFrame数据类型的属性是______。解析df.dtypes。返回每列的数据类型对于了解数据结构和类型转换很重要 。30. 题目计算滚动窗口平均值的函数是______。解析df.rolling().mean()。rolling()创建滚动窗口对象后接聚合函数如mean()、sum()等 。31. 题目将宽格式数据转换为长格式数据的函数是______。解析df.melt()。将多列熔化为两列变量和值是pivot()的逆操作 。32. 题目基于分位数离散化连续数据的函数是______。解析pd.cut()或pd.qcut()。cut()按值区间分箱qcut()按分位数分箱将连续变量转换为分类变量 。33. 题目合并多个DataFrame的函数是______。解析pd.concat()。沿指定轴拼接多个DataFrameaxis0纵向拼接增加行axis1横向拼接增加列 。34. 题目将字符串列拆分为多列的函数是______。解析df[col].str.split()。str访问器提供向量化字符串操作split()按分隔符拆分字符串expandTrue返回DataFrame 。35. 题目计算时间序列百分比变化的函数是______。解析df.pct_change()。计算当前元素与前一个元素的百分比变化常用于金融数据分析 。五、简答题每题5分共15分36. 题目简述Pandas中Series和DataFrame的区别与联系。解析区别维度Series是一维带标签数组DataFrame是二维表格结构结构Series只有索引和值两列DataFrame有多个列每列是一个Series创建Series从列表、字典等创建DataFrame从字典、列表的列表等创建联系DataFrame的每一列都是一个Series 2. 两者共享许多方法和属性如索引操作、缺失值处理都基于NumPy数组构建支持向量化运算示例# Series创建 s pd.Series([1, 2, 3], index[a, b, c]) # DataFrame创建 df pd.DataFrame({A: [1, 2], B: [3, 4]}) # DataFrame列是Series series_from_df df[A] # 返回SeriesSeries适合存储单变量数据DataFrame适合存储多变量表格数据 。37. 题目说明Pandas中loc和iloc索引器的区别并举例说明。解析loc基于标签的索引使用行/列的名称iloc基于整数位置的索引使用行/列的整数位置特性lociloc索引类型标签索引位置索引切片包含结束位置不包含结束位置布尔索引支持支持示例import pandas as pd df pd.DataFrame({A: [1, 2, 3], B: [4, 5, 6]}, index[row1, row2, row3]) # loc使用标签 print(df.loc[row1]) # 选择行标签为row1的行 print(df.loc[row1:row2]) # 切片包含row2 print(df.loc[:, A]) # 选择A列 # iloc使用位置 print(df.iloc[0]) # 选择第0行 print(df.iloc[0:2]) # 切片不包含位置2 print(df.iloc[:, 0]) # 选择第0列 # 布尔索引两者都支持 print(df.loc[df[A] 1]) # 选择A列大于1的行 print(df.iloc[(df[A] 1).values]) #需要.values转换为数组关键区别loc切片包含结束标签iloc切片不包含结束位置与Python列表切片一致 。38. 题目列举数据清洗中处理缺失值的常用方法及其适用场景。解析方法函数适用场景注意事项删除缺失值df.dropna()缺失值很少删除不影响分析可能丢失有价值信息固定值填充df.fillna(value)缺失值有明确默认值可能引入偏差统计值填充df.fillna(df.mean())数据分布较均匀对异常值敏感前向/后向填充df.fillna(methodffill)时间序列数据可能传播错误插值填充df.interpolate()数据有趋势或季节性计算成本较高示例代码import pandas as pd import numpy as np # 创建含缺失值的数据 df pd.DataFrame({A: [1, np.nan, 3, np.nan, 5], B: [np.nan, 2, 3, 4, np.nan]}) # 1. 删除缺失值 df_drop df.dropna() # 删除任何包含NaN的行 df_drop_col df.dropna(axis1) # 删除包含NaN的列 df_drop_all df.dropna(howall) # 只删除全为NaN的行 # 2. 固定值填充 df_fill_0 df.fillna(0) # 用0填充 df_fill_dict df.fillna({A: df[A].mean(), B: missing}) # 不同列不同填充 # 3. 前向/后向填充 df_ffill df.fillna(methodffill) # 用前一个值填充 df_bfill df.fillna(methodbfill) # 用后一个值填充 # 4. 插值填充 df_interp df.interpolate() # 线性插值 df_interp_time df.interpolate(methodtime) # 时间插值 # 选择策略的考虑因素 # - 缺失比例5%可删除520%需填充20%需谨慎处理 #数据性质时间序列适合前向填充连续变量适合插值 #分析目的预测模型对缺失值敏感描述统计可容忍更多缺失实际应用中常组合多种方法需根据数据特性和分析目标选择 。六、编程题每题10分共20分39. 题目给定销售数据DataFrame完成以下数据处理任务import pandas as pd import numpy as np # 创建示例数据 data { 日期: pd.date_range(2024-01-01, periods10, freqD), 产品: [A, B, A, C, B, A, C, B, A, C], 销售额: [100, 150, np.nan, 200, 180, 120, 220, np.nan, 130, 210], 数量: [5, 8, 6, 10, 9, 7, 11, 8, 6, 10] } df pd.DataFrame(data) print(原始数据:) print(df)要求处理缺失值用该产品平均销售额填充缺失的销售额计算每个产品的总销售额和平均销售额添加单价列销售额/数量保留2位小数找出单价最高的前3条记录按日期升序排序重置索引解析import pandas as pdimport numpy as np1. 创建数据data {日期: pd.date_range(2024-01-01, periods10, freqD),产品: [A, B, A, C, B, A, C, B, A, C],销售额: [100, 150, np.nan, 200, 180, 120, 220, np.nan, 130, 210],数量: [5, 8, 6, 10, 9, 7, 11, 8, 6, 10]}df pd.DataFrame(data)print(原始数据:)print(df)print( *50)2. 处理缺失值用该产品平均销售额填充方法1分组计算均值后填充product_means df.groupby(产品)[销售额].transform(mean)df[销售额] df[销售额].fillna(product_means)方法2使用fillna配合groupby更简洁df[销售额] df.groupby(产品)[销售额].apply(lambda x: x.fillna(x.mean()))print(处理缺失值后:)print(df)print( *50)3. 计算每个产品的总销售额和平均销售额product_stats df.groupby(产品)[销售额].agg([sum, mean]).round(2)product_stats.columns [总销售额, 平均销售额]print(产品统计:)print(product_stats)print( *50)4. 添加单价列df[单价] (df[销售额] / df[数量]).round(2)print(添加单价列后:)print(df)print( *50)5. 找出单价最高的前3条记录top_3_price df.nlargest(3, 单价)print(单价最高的3条记录:)print(top_3_price)print( *50)6. 按日期升序排序重置索引df_sorted df.sort_values(日期).reset_index(dropTrue)print(按日期排序并重置索引:)print(df_sorted)输出结果摘要print( *50)print(数据摘要:)print(f数据形状: {df_sorted.shape})print(f数据类型:{df_sorted.dtypes})print(f描述性统计:{df_sorted[[销售额, 数量, 单价]].describe().round(2)})**关键知识点** 1. groupby().transform()分组计算但保持原始形状适合填充缺失值 2. fillna()填充缺失值支持标量、字典或Series 3. groupby().agg()分组聚合可指定多个聚合函数 4. nlargest()高效获取最大的N个值比排序再切片更优 5. sort_values().reset_index()排序后重置索引dropTrue避免保留旧索引 **输出示例**原始数据:日期 产品 销售额 数量0 2024-01-01 A 100.0 51 2024-0102 B 150.0 82 2024-01-03 A NaN 63 2024-01-04 C 200.0 104 2024-01-05 B 180.0 95 2024-01-06 A 120.0 76 2024-01-07 C 220.0 117 2024-01-08 B NaN 88 2024-01-09 A 130.0 69 2024-01-10 C 210.0 10处理缺失值后:日期 产品 销售额 数量0 2024-01-01 A 100.0 51 2024-01-02 B 150.0 82 2024-01-03 A 116.7 6 # 填充了A产品的平均值(100120130)/3≈116.73 2024-01-04 C 200.0 104 2024-01-05 B 180.0 95 2024-01-06 A 120.0 76 2024-01-07 C 220.0 117 2024-01-08 B 165.0 8 # 填充了B产品的平均值(150180)/21658 2024-01-09 A 130.0 69 2024-01-10 C 210.0 10 本题综合考查了缺失值处理、分组聚合、列计算、排序筛选等核心数据处理技能 。40. 题目分析学生成绩数据完成以下数据可视化任务import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 创建示例数据 np.random.seed(42) data { 学号: range(1, 101), 班级: np.random.choice([A班, B班, C班], 100), 数学: np.random.normal(75, 10, 100).clip(0, 100), 语文: np.random.normal(80, 8, 100).clip(0, 100), 英语: np.random.normal(78, 9, 100).clip(0, 100), 性别: np.random.choice([男, 女], 100) } df pd.DataFrame(data) df[总分] df[[数学, 语文, 英语]].sum(axis1) df[平均分] df[[数学, 语文, 英语]].mean(axis1).round(1)要求计算各科平均分、最高分、最低分、标准差绘制各科成绩的箱线图比较分布情况绘制班级与平均分的分组柱状图绘制数学与语文成绩的散点图并添加回归线绘制各科成绩分布直方图子图形式解析import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # 设置中文字体和图形样式 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号 sns.set_style(whitegrid) # 1. 创建数据 np.random.seed(42) data { 学号: range(1, 101), 班级: np.random.choice([A班, B班, C班], 100), 数学: np.random.normal(75, 10, 100).clip(0, 100), 语文: np.random.normal(80, 8, 100).clip(0, 100), 英语: np.random.normal(78, 9, 100).clip(0, 100), 性别: np.random.choice([男, 女], 100) } df pd.DataFrame(data) df[总分] df[[数学, 语文, 英语]].sum(axis1) df[平均分] df[[数学, 语文, 英语]].mean(axis1).round(1) print(数据前5行:) print(df.head()) print( *50)2. 计算各科描述性统计subjects [数学, 语文, 英语]stats_df df[subjects].agg([mean, max, min, std]).round(2)print(各科成绩统计:)print(stats_df)print( *50)3. 绘制各科成绩箱线图plt.figure(figsize(10, 6))df[subjects].boxplot()plt.title(各科成绩分布箱线图)plt.ylabel(分数)plt.grid(True, alpha0.3)plt.tight_layout()plt.show()4. 绘制班级与平均分分组柱状图plt.figure(figsize(8, 5))class_avg df.groupby(班级)[平均分].mean().sort_values()colors [#FF6B6B, #4ECDC4, #45B7D1]class_avg.plot(kindbar, colorcolors, edgecolorblack)plt.title(各班级平均分比较)plt.xlabel(班级)plt.ylabel(平均分)plt.xticks(rotation0)在柱子上添加数值标签for i, v in enumerate(class_avg):plt.text(i, v 0.5, f{v:.1f}, hacenter, vabottom, fontweightbold)plt.tight_layout()plt.show()5. 绘制数学与语文成绩散点图带回归线plt.figure(figsize(8, 6))sns.regplot(x数学, y语文, datadf, scatter_kws{alpha:0.6},line_kws{color:red, linewidth:2})plt.title(数学与语文成绩关系散点图带回归线)plt.xlabel(数学成绩)plt.ylabel(语文成绩)计算相关系数corr df[数学].corr(df[语文])plt.text(0.05, 0.95, f相关系数: {corr:.3f},transformplt.gca().transAxes, fontsize12,bboxdict(boxstyleround, facecolorwheat, alpha0.8))plt.tight_layout()plt.show()6. 绘制各科成绩分布直方图子图fig, axes plt.subplots(1, 3, figsize(15, 4))colors [skyblue, lightgreen, salmon]for idx, subject in enumerate(subjects):ax axes[idx]df[subject].hist(bins15, colorcolors[idx], edgecolorblack, alpha0.7, axax)ax.set_title(f{subject}成绩分布)ax.set_xlabel(分数)ax.set_ylabel(频数)# 添加均值和标准差标注 mean_val df[subject].mean() std_val df[subject].std() ax.axvline(mean_val, colorred, linestyle--, linewidth2, labelf均值: {mean_val:.1f}) ax.axvline(mean_val std_val, colororange, linestyle:, linewidth1.5) ax.axvline(mean_val - std_val, colororange, linestyle:, linewidth1.5) ax.fill_betweenx([0, ax.get_ylim()[1]], mean_val std_val, mean_val std_val, alpha0.2, colororange, labelf±1标准差)ax.legend()plt.suptitle(各科成绩分布直方图, fontsize14)plt.tight_layout()plt.show()7. 附加分析性别与成绩关系print(性别与成绩关系:)gender_stats df.groupby(性别)[subjects [平均分]].mean().round(2)print(gender_stats)绘制性别平均分对比plt.figure(figsize(6, 4))gender_avg df.groupby(性别)[平均分].mean()gender_avg.plot(kindbar, color[lightblue, pink], edgecolorblack)plt.title(不同性别平均分对比)plt.xlabel(性别)plt.ylabel(平均分)plt.xticks(rotation0)for i, v in enumerate(gender_avg):plt.text(i, v 0.3, f{v:.1f}, hacenter, vabottom, fontweightbold)plt.tight_layout()plt.show()**关键知识点** 1. **描述性统计**df.agg()计算多个统计量round()控制小数位数 2. **箱线图**显示数据分布、中位数、四分位数和异常值 3. **分组聚合**groupby().mean()按组计算平均值 4. **散点图与回归线**sns.regplot()绘制散点图并添加回归线 5. **子图绘制**plt.subplots()创建多个子图分别绘制 6. **直方图**df.hist()绘制分布直方图bins控制分组数 **可视化要点** 1. 箱线图适合比较多个变量的分布 2. 柱状图适合比较分类数据的数值大小 3. 散点图适合观察两个连续变量的关系 4. 直方图适合观察单个变量的分布形态 5. 添加适当的标注均值、标准差、数值标签增强可读性 本题综合考查了数据统计、分组分析和多种可视化技巧 。试卷设计说明本试卷设计遵循以下原则1. 知识点覆盖全面| 知识模块 | 题目数量 | 分值 | 覆盖要点 ||----------|----------|------|----------|| 基础概念 | 5题 | 10分 | NumPy/Pandas区别、数据结构、基本操作 || 数据读取与存储 | 3题 | 6分 | 文件I/O、数据类型转换 || 数据清洗与预处理 | 6题 | 12分 | 缺失值处理、重复值、数据类型转换 || 数据筛选与排序 | 4题 | 8分 |条件筛选、排序、索引操作 || 数据聚合与分组 | 5题 | 10分 | groupby、聚合函数、透视表 || 数据合并与重塑 | 3题 | 6分 | merge、concat、pivot/melt || 时间序列处理 | 2题 | 4分 | 日期转换、时间差计算 || 数据可视化 | 4题 | 8分 | Matplotlib/Seaborn基础图表 || 综合应用题 | 2题 | 20分 | 完整数据处理流程 |2. 难度梯度合理基础题60%单选、判断、填空考查基本概念和语法中等题25%多选、简答考查知识理解和应用综合题15%编程题考查实际问题解决能力3. 考试重点突出根据高校Python数据分析课程大纲重点考查Pandas核心操作DataFrame操作、数据清洗、分组聚合NumPy基础数组运算、广播机制数据可视化基本图表绘制和解读实际应用完整的数据分析流程4. 评分标准建议 客观题严格按照答案评分简答题按要点给分代码示例正确加分 编程题功能实现40%、代码规范30%、结果正确30%5. 备考建议掌握核心函数重点记忆groupby()、merge()、pivot_table()等高频函数理解数据操作熟练使用loc/iloc索引、布尔筛选、链式操作练习完整流程从数据读取、清洗、分析到可视化的完整项目注意细节参数设置、缺失值处理、数据类型转换等易错点时间分配客观题快速作答编程题留足时间检查本试卷难度适中知识点覆盖全面符合大多数高校Python数据分析课程的考核要求既能检验基础知识掌握程度又能考查实际应用能力 。参考来源Python期末考试题解析及答案分析 - CSDN文库大二python数据分析期末试卷及答案.docx - 人人文库python数据分析期末考试题及答案-20250619073136.docx-原创力文档Python期末救急万字通用大题模板避坑指南从及格到满分的代码脚手架-CSDN博客(2026最新版)Python经典100道例题练习(附答案解析)高清PDF版开放下载!