如果成绩表不在内存里,而是读取自CSV文件,应该如何处理?
时间: 2024-11-05 10:32:25 浏览: 10
如果成绩表不在内存中,而是保存在CSV文件中,你可以先读取CSV文件将其转换成Pandas DataFrame,然后按照之前提到的方式操作。以下是处理步骤:
1. 使用Pandas的`read_csv()`函数读取CSV文件:
```python
import pandas as pd
data = pd.read_csv('scores.csv') # 假设你的成绩文件名为'scores.csv'
```
2. 确保CSV文件的结构与之前的示例一致,即至少包含"学号", "科目", 和 "分数"列。
3. 对于百分比计算和其他数据处理,保持不变,如下所示:
```python
data['百分比'] = data['分数'].apply(lambda x: (x / data['分数'].sum()) * 100).round(1)
```
4. 使用`data`代替`df`来进行后续的数据筛选和绘制饼图:
```python
...
for i, ax in enumerate(axs):
sub_df = data[data['学号'] % 3 == i]
...
```
记得替换`'scores.csv'`为实际的CSV文件路径。这样就能够在读取外部数据源的基础上完成饼图的绘制。
相关问题
采用python文件相关函数和方法,随机生成50个学生的姓名,平时成绩,期中成绩,期末成绩,成绩介于40到100之间,然后输入到成绩表.csv文件中,读取成绩表.csv文件数据计算每个学生最终成绩,最终成绩=平时成绩0.2+期中成绩0.3+期末成绩*0.5,然后将学生姓名和最终成绩写入score.csv文件中,格式要求姓名和最终成绩用逗号隔开,每个学生数据输出后换行
生成学生信息并写入成绩表.csv文件中:
```python
import random
import csv
# 生成50个学生的姓名和成绩
students = []
for i in range(50):
name = f"学生{i+1}"
score1 = random.randint(40, 100)
score2 = random.randint(40, 100)
score3 = random.randint(40, 100)
students.append((name, score1, score2, score3))
# 将学生信息写入csv文件
with open("成绩表.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["姓名", "平时成绩", "期中成绩", "期末成绩"])
writer.writerows(students)
```
读取成绩表.csv文件数据计算每个学生最终成绩,并将学生姓名和最终成绩写入score.csv文件中:
```python
with open("成绩表.csv", "r") as f1, open("score.csv", "w", newline="") as f2:
reader = csv.reader(f1)
writer = csv.writer(f2)
next(reader) # 跳过表头
writer.writerow(["姓名", "最终成绩"])
for row in reader:
name = row[0]
score1 = int(row[1])
score2 = int(row[2])
score3 = int(row[3])
final_score = score1 * 0.2 + score2 * 0.3 + score3 * 0.5
writer.writerow([name, final_score])
print(f"{name}: {final_score:.2f}")
```
采用python文件相关函数和方法,随机生成50个学生的姓名,平时成绩,期中成绩,期末成绩,成绩介于40到100之间,然后输入到成绩表.csv文件中,读取成绩表.csv文件数据计算每个学生最终成绩,最终成绩=平时成绩*0.2+期中成绩*0.3+期末成绩*0.5,然后将学生姓名和最终成绩写入score.csv文件中,格式要求姓名和最终成绩用逗号隔开,每个学生数据输出后换行
# 导入相关模块
import csv
import random
# 随机生成50个学生的姓名和成绩
students = []
for i in range(1, 51):
name = '学生' + str(i)
normal_score = random.randint(40, 100)
midterm_score = random.randint(40, 100)
final_score = random.randint(40, 100)
students.append((name, normal_score, midterm_score, final_score))
# 将数据写入成绩表.csv文件中
with open('成绩表.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['姓名', '平时成绩', '期中成绩', '期末成绩'])
for student in students:
writer.writerow(student)
# 计算每个学生最终成绩,写入score.csv文件中
with open('成绩表.csv', 'r') as f1, open('score.csv', 'w', newline='') as f2:
reader = csv.reader(f1)
writer = csv.writer(f2)
writer.writerow(['姓名', '最终成绩'])
next(reader)
for row in reader:
name = row[0]
normal_score = int(row[1])
midterm_score = int(row[2])
final_score = int(row[3])
total_score = normal_score * 0.2 + midterm_score * 0.3 + final_score * 0.5
writer.writerow([name, total_score])
print(name + ',' + str(total_score))
阅读全文