Pandas数据分析

Posted by AspenStars on March 23, 2020

本文以学生成绩表为例

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()