本文以学生成绩表为例
Pandas基本操作
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 读入
df = pd.read_excel('./data/成绩.xlsx')
# 单条件筛选某列数据:
df[df['课程类别'] == '外语']
# 多条件筛选某列数据:
df[(df['课程类别'] == '外语') & (df['分数'] > 60)]
# 取出某个同学的所有成绩
df.loc[df['姓名'] == '某某', :]
# 分组
gp_sc = df.groupby('学号')['分数']
# 分组取最大
gp_sc.max()
# apply实现精细处理
def if_jige(x):
x = int(x)
if x >= 60:
return '及格'
else:
return '不及格'
gp_sc = df.groupby('学号')['分数'].min().reset_index()
gp_sc['类别'] = gp_sc['分数'].apply(if_jige)
# 排序
df.sort_values('分数',ascending=False)
# 排序并取出不重复分数数据
df.sort_values('分数',ascending=False)['分数'].unique()
# 替换分数中的非数值数据
gread_dic = {'通过':85, '良好':75, '优秀':95, '不通过':0}
for i in range(1, len(df)):
if df.iloc[i, 11] in gread_dic: # 第11列为分数
df.iloc[i, 11] = gread_dic[df.iloc[i, 11]]
else:
df.iloc[i, 11] = int(df.iloc[i, 11])
# 取出成绩表、学生表、课程表分类处理
scores = df[['学号','课程代码','分数','重修']]
student = df[['学号','姓名','班级']]
course = df[['课程代码','课程名称','课程学分','课程类别','课程类别代码']]
# 取出学号,课程代码,作为唯一索引
ID = df['学号'].unique()
CourseID = df['课程代码'].unique()
# 取出课程类别
course_category = df['课程类别'].unique()
# 去除选修课程和创新学分
for name in CourseCat:
if ('选修' not in name) and ('创新' not in name):
print(name)
# 建立学号、课程表
id_coures = pd.DataFrame(columns=CourseID,index=ID)
# 对特定单元格赋值
id_coures.loc['2014220105022', 'A0800120'] = 87
# 去重
id_coures = id_coures.drop_duplicates()