要求

DAY1

练习1

通过 Pandas 创建 学生成绩表的 excel 文件 。

1
2
3
stu_names = ["胡歌","林更新","金世佳","丑娟"]
courses = ['语文', '数学', '英语', 'Python', '体育']
data = np.array([[87., 74., 98., 84., np.nan],[79., 69., 61., 99., np.nan],[84., 84., 94., 66., np.nan],[90., 60., 72., 90., np.nan]])

再通过 Pandas 创建 选修成绩表的 excel 文件 。

1
2
3
ele_names = ["胡歌","林更新","金世佳","丑娟"]
ele_courses = ['统计学', '日语']
ele_data = np.array([[85., np.nan],[np.nan, 69.],[np.nan, 95.],[80., np.nan]])

练习2

读取两表数据,注意:此时需指定行索引为第一列。

练习3

  • 因为体育课全被数学老师抢了,所以学生成绩表中的体育期末成绩全为空,将其删除。
  • 学生成绩表.xlsx 中没有选修的数据,将 选修成绩表.xlsx 的数据添加到 学生成绩表 中。
  • 可以观察出来,此时的数据每个人都是五门课程,现在需添加一列 总成绩 来求得每位学生的总成绩。(pandas中有df.sum(axis=1)来进行求每行的数据之和,并且跳过。)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import numpy as np
import pandas as pd


# 创建成绩 DataFrame并写入文件work1
stu_names = ["胡歌","林更新","金世佳","丑娟"]
courses = ['语文', '数学', '英语', 'Python', '体育']
data = np.array([[87., 74., 98., 84., np.nan],[79., 69., 61., 99., np.nan],[84., 84., 94., 66., np.nan],[90., 60., 72., 90., np.nan]])
cj = pd.DataFrame(data,index=stu_names,columns=courses)
cj.to_csv('work1.csv',header=True,index=True)

# 创建选修 DataFrame并写入文件work2
ele_names = ["胡歌","林更新","金世佳","丑娟"]
ele_courses = ['统计学', '日语']
ele_data = np.array([[85., np.nan],[np.nan, 69.],[np.nan, 95.],[80., np.nan]])
xx = pd.DataFrame(ele_data,index=ele_names,columns=ele_courses)
xx.to_csv('work2.csv',header=True,index=True)

#读取 成绩 选修csv 指定行索引为第一列
r1 = pd.read_csv('./work1.csv',index_col=0)
r2 = pd.read_csv('./work2.csv',index_col=0)
#print(r1)
#print(r2)

#删除体育成绩
del r1['体育']
#print(r1)

#增加选修课成绩
r1[r2.columns[0]] = r2[r2.columns[0]]
r1[r2.columns[1]] = r2[r2.columns[1]]
#print(r1)

#增加总成绩
r1['总成绩'] = r1.sum(axis=1)
#print(r1)

#保存至总表
r1.to_csv('total.csv',index=True,header=True)
r1.to_excel('total.xlsx',index=True,header=True)

最终效果

1
2
3
4
5
       语文    数学    英语  Python   统计学    日语    总成绩
胡歌 87.0 74.0 98.0 84.0 85.0 NaN 428.0
林更新 79.0 69.0 61.0 99.0 NaN 69.0 377.0
金世佳 84.0 84.0 94.0 66.0 NaN 95.0 423.0
丑娟 90.0 60.0 72.0 90.0 80.0 NaN 392.0