这段代码的主要功能是处理学生成绩数据,并生成排名表和不及格信息表。
首先,它导入了 numpy
、pandas
和 json
模块,并加载了一个名为 courses.json
的 JSON 文件,该文件包含课程代码和名称的映射关系。
接下来,定义了一个字典变量 scores
,其中包含各个评分等级对应的分数。
然后,定义了一个 main()
函数。在函数内部,首先使用 pd.read_excel()
函数读取名为 data.xlsx
的 Excel 文件,并选择特定的列进行处理。随后进行一系列数据清洗操作:
- 使用
data.dropna()
删除包含缺失值的行; - 使用
.apply()
方法和str.isnumeric()
函数过滤掉学号列中非数字类型的值; - 将总评成绩复制给新的成绩列,并将总评成绩转换为浮点型数值;
- 将学分转换为浮点型数值;
- 使用
.isin()
方法过滤出属于指定课程代码的行;
接着,在变量 fail
中存储了所有总评成绩低于 60 分(即不及格)的数据,并按姓名进行排序并重置索引。
然后创建了一个空的 DataFrame 对象 rank
,用于存储排名表。通过遍历每个学生的学号,在循环中进行以下操作:
- 通过筛选学号相同的行,计算学分加权成绩并求和;
- 计算均分,并将相关信息存储到新的 Series 对象
new_stu
中; - 使用
pd.concat()
函数将new_stu
添加到rank
中; - 创建一个新的 Series 对象
new_row
,其中包含每个课程对应的总评成绩,并通过_append()
方法将其添加到rank
中。
最后,对排名表进行排序、重新设置索引和添加排名列。然后使用 .to_excel()
方法将排名表保存为 Excel 文件,并且删除所有值都是缺失值的列。
代码中还有一行错误的操作:rank = pd.concat([rank, new_row], ignore_index=True)
应该在循环内部而不是外部,否则会报错。可以将其移动到循环内部,在遍历每个学生时更新排名表。
如果需要打印输出变量 courses
的内容,可以取消注释最后一行代码:print(courses)
。
请注意,这只是对给出的代码段进行简单解读,并提供了可能的修改建议。如果您有具体问题或需求,请提供更多信息,以便我能够更好地帮助您。
内容由零声教学AI助手提供,问题来源于学员提问