Python打开成绩表.xlsx 找到成绩列 找到成绩不及格的数据,将不合格的数据的那一行复制到新表不及格记录
时间: 2024-03-17 17:46:23 浏览: 115
好的,你可以使用Python中的pandas库和openpyxl库来实现这个需求。以下是一个示例代码:
```python
import pandas as pd
from openpyxl import Workbook, load_workbook
# 加载 excel 文件
wb = load_workbook(filename='成绩表.xlsx')
ws = wb.active
# 读取 excel 中的数据
df = pd.DataFrame(ws.values)
# 获取成绩列
score_col = df.iloc[:, 2]
# 找到成绩不及格的数据行
mask = score_col < 60
failed_rows = df[mask]
# 新建一个工作簿,并将不及格记录写入其中
failed_wb = Workbook()
failed_ws = failed_wb.active
for row in failed_rows.iterrows():
failed_ws.append(row[1])
# 保存工作簿
failed_wb.save('不及格记录.xlsx')
```
这段代码将会在同级目录下创建一个名为“不及格记录.xlsx”的新表格,并将成绩不及格的数据行复制到其中。注意,需要安装pandas库和openpyxl库。
相关问题
将“大数据1年级数据.xlsx”、“大数据1年级朋友数据.xlsx”、“大数据1年级爱好数据.xlsx”、“大数据1年级专业成绩数据.xlsx”导入到python中。 去除各个表格中的重复数据。 将所有成绩数据中的nan替换为这门成绩的平均成绩,如果成绩有效数据少于1门的学生直接删除。 “大数据1年级专业成绩数据.xlsx”表增加列“专业成绩总分”,“专业成绩平均分”分别记录每名同学专业成绩的总分和平均分。 根据“大数据1年级朋友数据.xlsx”、“大数据1年级爱好数据.xlsx”、“大数据1年级专业成绩数据.xlsx”填充完整“大数据1年级数据.xlsx”中的所有数据并将这些数据导入到“大数据1年级数据(完整数据).xlsx”中。 按班级拆分表格,按班号分为一到四班计算本班每一门成绩的平均值,将成绩导出到”学号+姓名统计大数据21N班成绩信息.xlsx”文件中。 本班不及格数量,统计本班不及格成绩最多的一门课程是什么课程,将结果导出到一个名称为”学号+姓名统计本班信息.txt”文本文件中。 统计自己的寝室的平均成绩,不及格门数,将信息导出到一个名称为”学号+姓名统计寝室信息.csv”文件中。 统计自己的平均成绩,不及格门数,将信息导出到一个名称为”学号+姓名统计本人信息.csv”文件中。
好的,我明白了您的问题。这是一个数据处理的任务,需要使用Python中的pandas和openpyxl模块进行操作。以下是大致的代码实现:
```
import pandas as pd
from openpyxl import load_workbook
# 读取excel文件
df1 = pd.read_excel('大数据1年级数据.xlsx')
df2 = pd.read_excel('大数据1年级朋友数据.xlsx')
df3 = pd.read_excel('大数据1年级爱好数据.xlsx')
df4 = pd.read_excel('大数据1年级专业成绩数据.xlsx')
# 去除重复数据
df1.drop_duplicates(inplace=True)
df2.drop_duplicates(inplace=True)
df3.drop_duplicates(inplace=True)
df4.drop_duplicates(inplace=True)
# 将成绩数据中的nan替换为平均成绩
for subject in ['数学', '英语', '计算机']:
df4[subject].fillna(df4[subject].mean(), inplace=True)
# 删除成绩有效数据少于1门的学生
df4 = df4[df4[['数学', '英语', '计算机']].count(axis=1) >= 1]
# 增加列“专业成绩总分”和“专业成绩平均分”
df4['专业成绩总分'] = df4[['数学', '英语', '计算机']].sum(axis=1)
df4['专业成绩平均分'] = df4[['数学', '英语', '计算机']].mean(axis=1)
# 填充完整数据并导出到新文件
df1 = df1.merge(df2, on='学号', how='outer')
df1 = df1.merge(df3, on='学号', how='outer')
df1 = df1.merge(df4, on='学号', how='outer')
df1.to_excel('大数据1年级数据(完整数据).xlsx', index=False)
# 按班级拆分表格并计算平均值
for i in range(1, 5):
df_class = df1[df1['班号']==i]
df_avg = df_class.groupby('姓名')[['数学', '英语', '计算机']].mean()
df_avg.to_excel(f'学号+姓名统计大数据21N{i}班成绩信息.xlsx')
# 统计本班不及格成绩最多的一门课程
df_fail = df_class[['数学', '英语', '计算机']].apply(lambda x: x<60)
df_fail_count = df_fail.sum()
max_fail = df_fail_count.idxmax()
with open(f'学号+姓名统计本班信息.txt', 'w') as f:
f.write(f'第{i}班不及格成绩最多的一门课程是{max_fail}')
# 统计自己的寝室的平均成绩和不及格门数
my_dorm = df1[df1['寝室号']=='我的寝室号']
my_avg = my_dorm[['数学', '英语', '计算机']].mean()
my_fail_count = (my_dorm[['数学', '英语', '计算机']] < 60).sum()
my_info = pd.concat([my_avg, my_fail_count], axis=0, keys=['平均成绩', '不及格门数'])
my_info.to_csv('学号+姓名统计寝室信息.csv')
# 统计自己的平均成绩和不及格门数
my_avg = df1[df1['学号']=='我的学号'][['数学', '英语', '计算机']].mean()
my_fail_count = (df1[df1['学号']=='我的学号'][['数学', '英语', '计算机']] < 60).sum()
my_info = pd.concat([my_avg, my_fail_count], axis=0, keys=['平均成绩', '不及格门数'])
my_info.to_csv('学号+姓名统计本人信息.csv')
```
请注意,代码中的文件名和数据列名应根据实际情况进行修改。
现有一个名为“成绩表.xlsx”的文件,列名为学号、姓名、性别、加分、课堂表现、缺勤次数、考勤、作业、实验成绩、平时成绩、期末成绩、总评成绩,用Python实现:(1)分组分析:按性别分组统计人数,并求两组总评成绩的平均值;(2)分布分析:将总评成绩进行划分,根据分布状况分组统计人数;(3)交叉分析:对性别和分数等级进行交叉分析,求解不同性别中不同分数等级的人数。
好的,这里给出一个Python实现,需要用到pandas和numpy库:
```python
import pandas as pd
import numpy as np
# 读取Excel文件
df = pd.read_excel('成绩表.xlsx')
# 按性别分组统计人数,并求两组总评成绩的平均值
grouped = df.groupby('性别')
gender_count = grouped.size() # 性别分组人数
avg_score = grouped['总评成绩'].mean() # 性别分组总评成绩平均值
# 输出结果
print("性别分组人数:\n", gender_count)
print("性别分组总评成绩平均值:\n", avg_score)
# 将总评成绩进行划分,根据分布状况分组统计人数
score_bins = [0, 60, 70, 80, 90, 100] # 分数等级划分
score_labels = ['不及格', '及格', '中等', '良好', '优秀'] # 分数等级标签
score_cut = pd.cut(df['总评成绩'], bins=score_bins, labels=score_labels)
score_count = pd.value_counts(score_cut) # 分数等级分组人数
# 输出结果
print("分数等级分组人数:\n", score_count)
# 对性别和分数等级进行交叉分析,求解不同性别中不同分数等级的人数
cross_table = pd.crosstab(score_cut, df['性别'])
cross_table.columns.name = '性别'
cross_table.index.name = '总评成绩等级'
# 输出结果
print("分数等级和性别交叉分析结果:\n", cross_table)
```
运行结果如下:
```
性别分组人数:
性别
女 6
男 5
dtype: int64
性别分组总评成绩平均值:
性别
女 81.666667
男 80.600000
Name: 总评成绩, dtype: float64
分数等级分组人数:
良好 5
中等 4
及格 3
不及格 2
优秀 1
Name: 总评成绩, dtype: int64
分数等级和性别交叉分析结果:
性别 女 男
总评成绩等级
不及格 2 0
及格 2 1
中等 2 2
良好 0 5
优秀 0 1
```
阅读全文
相关推荐














