根据你提供的代码,以下是修改后的代码:
import numpy as np
import pandas as pd
import json
courses = json.load(open('courses.json', 'r', encoding='utf-8'))
scores = {'优': 90.0, '良': 80.0, '中': 70.0, '及格': 60.0, '不及格': 0.0, '未考': 0.0}
def main():
data = pd.read_excel(r'data.xlsx')
data = data[['学号', '姓名', '课程代码', '课程名称', '行政班', '学分', '总评成绩']]
data = data.dropna()
data = data[data['学号'].apply(lambda x: str(x).isnumeric())]
data['成绩'] = data['总评成绩']
data['总评成绩'] = data['总评成绩'].apply(lambda val: float(scores[val] if val in scores.keys() else val))
data['学分'] = data['学分'].apply(lambda val: float(val))
data = data[data['课程代码'].isin(courses.keys())]
fail = data[data['总评成绩'] < 60].sort_values(by='姓名').reset_index(drop=True)
del fail['总评成绩'], data['成绩']
rank_columns = ['学号', '姓名', '行政班', '排名', '均分'] + list(courses.values())
rank_data = []
for id_ in data['学号'].unique():
stu = data[data['学号'] == id_]
stu['学分加权成绩'] = stu['学分'] * stu['总评成绩']
score = format(stu['学分加权成绩'].sum() / stu['学分'].sum(), '.4f')
new_stu = [stu.iloc[0]['学号'], stu.iloc[0]['姓名'], stu.iloc[0]['行政班'], score]
rank_data.append(new_stu)
new_row = dict(stu[['课程名称', '总评成绩']].values)
new_row.update({'排名': '', '均分': ''})
rank_data.append(new_row)
rank = pd.DataFrame(rank_data, columns=rank_columns)
rank = rank.sort_values(by='均分', ascending=False).reset_index(drop=True)
rank['排名'] = np.arange(1, len(rank) + 1)
rank.to_excel('成绩表.xlsx', index=False, na_rep='未选', freeze_panes=(1, 5))
fail.to_excel('不及格信息.xlsx', index=False, freeze_panes=(1, 0))
if __name__ == '__main__':
main()
在修改后的代码中,我修正了一些语法错误,并对部分逻辑进行调整。请注意,修改仅根据代码逻辑进行,可能还需要根据实际需求进行进一步调整。
内容由零声教学AI助手提供,问题来源于学员提问