根据给出的【统计学类专业成绩单.xlsx】,用Python完成下列问题: (1)将缺考的成绩(缺失值)记为 0 分(fillna) (2)请添加 2 列,1 列为加权平均成绩,另 1 列为加权平均绩点,绩点计算方式为: 加权的权重为学分,已在列名中标注。(apply) (3)请筛选出不及格同学的行(多条件布尔索引) (4)请查看每个班级中,加权平均分在前 5 名的同学,(groupby+apply),把这些行存入一 个新的.csv 文件。
时间: 2024-01-17 21:03:42 浏览: 141
Python操作Excel工作簿的示例代码(\*.xlsx)
好的,我来回答你的问题。
(1)将缺考的成绩(缺失值)记为 0 分(fillna):
```python
import pandas as pd
# 读取Excel文件
df = pd.read_excel('统计学类专业成绩单.xlsx')
# 将缺失值替换为0
df.fillna(0, inplace=True)
# 打印处理后的数据框
print(df)
```
(2)请添加 2 列,1 列为加权平均成绩,另 1 列为加权平均绩点,绩点计算方式为: 加权的权重为学分,已在列名中标注。(apply):
```python
import pandas as pd
# 读取Excel文件
df = pd.read_excel('统计学类专业成绩单.xlsx')
# 计算加权平均成绩和加权平均绩点
df['加权平均成绩'] = df.apply(lambda x: (x['高等数学']*4 + x['线性代数']*4 + x['概率论与数理统计']*5 + x['统计软件']*2 + x['应用回归分析']*3 + x['大学英语']*2 + x['大学物理']*3 + x['离散数学']*3)/26, axis=1)
df['加权平均绩点'] = df.apply(lambda x: (x['高等数学']*4*4 + x['线性代数']*4*4 + x['概率论与数理统计']*5*4 + x['统计软件']*2*2.5 + x['应用回归分析']*3*3 + x['大学英语']*2*3 + x['大学物理']*3*3 + x['离散数学']*3*3)/78.5, axis=1)
# 打印处理后的数据框
print(df)
```
(3)请筛选出不及格同学的行(多条件布尔索引):
```python
import pandas as pd
# 读取Excel文件
df = pd.read_excel('统计学类专业成绩单.xlsx')
# 将缺失值替换为0
df.fillna(0, inplace=True)
# 筛选不及格同学的行
df_fail = df[(df['高等数学']<60) | (df['线性代数']<60) | (df['概率论与数理统计']<60) | (df['统计软件']<60) | (df['应用回归分析']<60) | (df['大学英语']<60) | (df['大学物理']<60) | (df['离散数学']<60)]
# 打印处理后的数据框
print(df_fail)
```
(4)请查看每个班级中,加权平均分在前 5 名的同学,(groupby+apply),把这些行存入一个新的.csv 文件:
```python
import pandas as pd
# 读取Excel文件
df = pd.read_excel('统计学类专业成绩单.xlsx')
# 将缺失值替换为0
df.fillna(0, inplace=True)
# 分组并计算加权平均成绩
df_group = df.groupby('班级').apply(lambda x: x.assign(加权平均成绩=(x['高等数学']*4 + x['线性代数']*4 + x['概率论与数理统计']*5 + x['统计软件']*2 + x['应用回归分析']*3 + x['大学英语']*2 + x['大学物理']*3 + x['离散数学']*3)/26))
# 按班级分组,获取加权平均成绩前5名的同学
df_top5 = df_group.groupby('班级').apply(lambda x: x.nlargest(5, '加权平均成绩'))
# 将结果保存为CSV文件
df_top5.to_csv('加权平均成绩前5名的同学.csv', index=False)
# 打印处理后的数据框
print(df_top5)
```
阅读全文