实验要求:
- 创建一个8行5列的DataFrame对象,列名为[‘Num’, ‘Name’,‘C++’, ‘Java’, ‘Python’],分别代表学号,姓名,C++成绩,Java成绩,Python成绩。所有成绩要求分布在[50,100)区间,是随机生成的整数。(以下所述的行号和列号均代表行列索引的默认编号。请使用本章所学的知识按顺序解决这些问题,不要投机取巧!)
- 复制第4个(从0开始)学生的全部信息,把它作为新行追加到表尾;
- 将(3, 4)、(6, 3)、(5, 2)、(2, 3)、(1, 0)这几个位置上的元素置为NaN;
- 输出所有包含缺失值的行;
- 删除学号为缺失值的行;
- 将成绩列上的所有缺失值用其同列上的前一个和后一个成绩的平均值替换;
- 检测是否存在重复行;如果存在,保留最后一行,删除其余行;
- 重置行索引;
- 在2,3,4列上分别找到大于60的最小值,然后把这些值用55替换(如果某列上有多个最小值,则全部替换);
- 输出Java成绩不及格的学生的信息(学号,姓名,Java成绩);
- 输出“挂科”学生的全部信息。
- 自己人工仔细检查以上每一道小题的操作结果是否正确。如果确认无误,用DataFrame的to_excel方法将数据存储到“Scores.xlsx”文件中,用Excel打开并查看数据是否正确。如果以上都正确,最后输出 :“我做对了!”
- 创建2个行、列大小均不相同的DataFrame对象(要求有部分行索引名和列索引名相同)。
- 手工计算按某个列索引(或列索引的组合)内连接、外连接、左连接和右连接的结果;然后通过编程验证计算结果的正确性。(用merge函数验证)
- 手工计算在0轴和1轴分别并联和交联的结果;然后通过编程验证计算结果的正确性。(用concat函数验证)
- 手工计算按行索引作为连接键左连接的结果;然后通过编程验证计算结果的正确性。(用join函数验证)
实验内容和实验结果:
-
- 导入必要的库:pandas 用于数据处理,random 用于生成随机数,numpy 用于数值计算。
import pandas as pd import random import numpy as np
- 创建一个空的DataFrame pds,包含8行和5列,分别是’Num’, ‘Name’, ‘C++’, ‘Java’, ‘Python’。
pds = pd.DataFrame(index=list(range(8)), columns=['Num', 'Name', 'C++', 'Java', 'Python'])
- 填充 ‘Num’ 和 ‘Name’ 列。
pds['Num'] = [1, 2, 3, 4, 5, np.nan, 7, 8] pds['Name'] = ['特朗普', '拜登', '康熙', '雍正', '乾隆', '和珅', '张廷玉', '姚启圣']
- 使用随机数填充 ‘C++’, ‘Java’, ‘Python’ 列。
for i in range(8): pds.loc[i, 'C++'] = random.randint(50, 100) pds.loc[i, 'Java'] = random.randint(50, 100) pds.loc[i, 'Python'] = random.randint(50, 100)
Num Name C++ Java Python 1.0 特朗普 67 98 74 2.0 拜登 65 70 60 3.0 康熙 77 83 92 4.0 雍正 72 70 97 5.0 乾隆 93 79 93 NaN 和珅 97 94 81 7.0 张廷玉 55 78 95 8.0 姚启圣 52 69 71 - 将第8行设置为第5行的复制。
pds.loc[8] = pds.loc[4]
Num Name C++ Java Python 1.0 特朗普 67 98 74 NaN 拜登 65 70 60 3.0 康熙 77 NaN 92 4.0 雍正 72