但在原本的表格中列名没有score这一项,其列名形如“数学分析,分数”、“高等代数,分数”,此时如何解决上述问题
时间: 2024-03-14 22:49:26 浏览: 65
如果原本的表格中列名没有 `score` 这一项,而是形如“数学分析,分数”、“高等代数,分数”等,那么我们需要先提取出课程名称和对应的分数,然后再按照要求计算加权平均成绩和加权平均绩点。
下面是修改后的代码:
```python
import pandas as pd
# 读取 Excel 文件
df = pd.read_excel('统计学类专业成绩单.xlsx')
# 提取课程名称和对应的分数
courses = ['高等数学', '线性代数', '概率论与数理统计', 'Python程序设计', '高级计量经济学', 'R语言程序设计', '统计学原理']
scores = []
for c in courses:
scores.append(df[c + ',分数'])
# 添加加权平均成绩列
weighted_scores = []
for i in range(len(courses)):
weighted_scores.append(scores[i] * df[courses[i] + ',学分'])
df['加权平均成绩'] = sum(weighted_scores) / sum(df[courses[i] + ',学分'] for i in range(len(courses)))
# 定义计算绩点的函数
def calc_gpa(score):
if score >= 90:
return 4.0
elif score >= 86:
return 3.7
elif score >= 83:
return 3.3
elif score >= 80:
return 3.0
elif score >= 76:
return 2.7
elif score >= 73:
return 2.3
elif score >= 70:
return 2.0
elif score >= 66:
return 1.7
elif score >= 63:
return 1.3
elif score >= 60:
return 1.0
else:
return 0
# 添加加权平均绩点列
df['加权平均绩点'] = df['加权平均成绩'].apply(calc_gpa)
# 输出结果
print(df)
```
这段代码会打印出包含加权平均成绩和加权平均绩点的新 DataFrame。请注意,这里我们使用了 `+` 运算符来拼接字符串,从而得到对应课程的列名。
同时,我们还需要注意,在这里我们使用了一个循环来提取对应课程的分数列,以及计算加权平均成绩列。这样做的好处是,即使列名发生变化,只需要修改 `courses` 列表中对应的课程名称即可,代码的可维护性更高。
阅读全文