荐 大数据之学习成绩处理案例(一)
大数据之学习成绩处理案例
来自学了两天python的NewBee-Yunzi的第一个案例总结:
这个案例学习如何处理数据表中的重复值,异常值,空值,空格,根据条件对值进行分级。
有这么个数据表:
学号 姓名 性别 英语 体育 军训 数分 高代 解几
2308024241 成龙 男 76 78 77 40 23 60
2308024244 周怡 女 66 91 75 47 47 44
2308024251 张波 男 85 81 75 45 45 60
2308024249 朱浩 男 65 50 80 72 62 71
2308024219 封印 女 73 88 92 61 47 46
2308024201 迟培 男 60 50 89 71 76 71
2308024347 李华 女 67 61 84 61 65 78
2308024307 陈田 男 76 79 86 69 40 69
2308024326 余皓 男 66 67 85 65 61 71
2308024320 李嘉 女 62 作弊 90 60 67 77
2308024342 李上初 男 76 90 84 60 66 60
2308024310 郭窦 女 79 67 84 64 64 79
2308024435 姜毅涛 男 77 71 缺考 61 73 76
2308024432 赵宇 男 74 74 88 68 70 71
2308024446 周路 女 76 80 61 74 80
2308024421 林建祥 男 72 72 81 63 90 75
2308024433 李大强 男 79 76 77 78 70 70
2308024428 李侧通 男 64 96 91 69 60 77
2308024402 王慧 女 73 74 93 70 71 75
2308024422 李晓亮 男 85 60 85 72 72 83
2308024201 迟培 男 60 50 89 71 76 71
1.导入数据
import pandas as pd #导入pandas库取名pd
df = pd.read_excel('./rz.xlsx') #读表
df.shape #查看表的行列数(21 行 10 列)
out:(21, 10)
df#瞅一眼读进来的表
out:
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几
0 2308024241 23080242 成龙 男 76 78 77 40 23 60
1 2308024244 23080242 周怡 女 66 91 75 47 47 44
2 2308024251 23080242 张波 男 85 81 75 45 45 60
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71
4 2308024219 23080242 封印 女 73 88 92 61 47 46
5 2308024201 23080242 迟培 男 60 50 89 71 76 71
6 2308024347 23080243 李华 女 67 61 84 61 65 78
7 2308024307 23080243 陈田 男 76 79 86 69 40 69
8 2308024326 23080243 余皓 男 66 67 85 65 61 71
9 2308024320 23080243 李嘉 女 62 作弊 90 60 67 77
10 2308024342 23080243 李上初 男 76 90 84 60 66 60
11 2308024310 23080243 郭窦 女 79 67 84 64 64 79
12 2308024435 23080244 姜毅涛 男 77 71 缺考 61 73 76
13 2308024432 23080244 赵宇 男 74 74 88 68 70 71
14 2308024446 23080244 周路 女 76 80 NaN 61 74 80
15 2308024421 23080244 林建祥 男 72 72 81 63 90 75
16 2308024433 23080244 李大强 男 79 76 77 78 70 70
17 2308024428 23080244 李侧通 男 64 96 91 69 60 77
18 2308024402 23080244 王慧 女 73 74 93 70 71 75
19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83
20 2308024201 23080242 迟培 男 60 50 89 71 76 71
2.数据查重
df.duplicated()#重复的行返回布尔类型True ,这个重复指的是第二次及其以后出现的都是True,结果显示第20行为True,即重复
out:
0 False
1 False
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 False
11 False
12 False
13 False
14 False
15 False
16 False
17 False
18 False
19 False
20 True
dtype: bool
df[df.duplicated()] #瞅一眼这个重复的行
out:
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几
20 2308024201 23080242 迟培 男 60 50 89 71 76 71
df1 = df.drop_duplicates()#drop_duplicates()删除重复数据行,默认保留的是重复数据的第一条
df1.shape#瞅一眼表格行数是不是少了一行
out:
(20, 10)
3.脏数据用0代替
df1.isnull().any()#先试试咋查出来NaN isnull()返回布尔类型 False为NaN any()会判断哪些”列”存在缺失值
out:
学号 False
班级 False
姓名 False
性别 False
英语 False
体育 False
军训 True
数分 False
高代 False
解几 False
dtype: bool
df1[df1.isnull().values==True] #瞅一眼有NaN的行吧
out:
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几
14 2308024446 23080244 周路 女 76 80 NaN 61 74 80
df2 = df1.fillna(0)#df1.fillna(0)用0来代替了NaN
df2#顺便瞅了一眼是不是真的代替了
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几
0 2308024241 23080242 成龙 男 76 78 77 40 23 60
1 2308024244 23080242 周怡 女 66 91 75 47 47 44
2 2308024251 23080242 张波 男 85 81 75 45 45 60
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71
4 2308024219 23080242 封印 女 73 88 92 61 47 46
5 2308024201 23080242 迟培 男 60 50 89 71 76 71
6 2308024347 23080243 李华 女 67 61 84 61 65 78
7 2308024307 23080243 陈田 男 76 79 86 69 40 69
8 2308024326 23080243 余皓 男 66 67 85 65 61 71
9 2308024320 23080243 李嘉 女 62 作弊 90 60 67 77
10 2308024342 23080243 李上初 男 76 90 84 60 66 60
11 2308024310 23080243 郭窦 女 79 67 84 64 64 79
12 2308024435 23080244 姜毅涛 男 77 71 缺考 61 73 76
13 2308024432 23080244 赵宇 男 74 74 88 68 70 71
14 2308024446 23080244 周路 女 76 80 0 61 74 80
15 2308024421 23080244 林建祥 男 72 72 81 63 90 75
16 2308024433 23080244 李大强 男 79 76 77 78 70 70
17 2308024428 23080244 李侧通 男 64 96 91 69 60 77
18 2308024402 23080244 王慧 女 73 74 93 70 71 75
19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83
#对于表里面的“作弊”“缺考” 直接替换掉或许可以吧
df3 = df2.replace('作弊','0').replace('缺考','0')
df3#瞅一眼
out:
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几
0 2308024241 23080242 成龙 男 76 78 77 40 23 60
1 2308024244 23080242 周怡 女 66 91 75 47 47 44
2 2308024251 23080242 张波 男 85 81 75 45 45 60
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71
4 2308024219 23080242 封印 女 73 88 92 61 47 46
5 2308024201 23080242 迟培 男 60 50 89 71 76 71
6 2308024347 23080243 李华 女 67 61 84 61 65 78
7 2308024307 23080243 陈田 男 76 79 86 69 40 69
8 2308024326 23080243 余皓 男 66 67 85 65 61 71
9 2308024320 23080243 李嘉 女 62 0 90 60 67 77
10 2308024342 23080243 李上初 男 76 90 84 60 66 60
11 2308024310 23080243 郭窦 女 79 67 84 64 64 79
12 2308024435 23080244 姜毅涛 男 77 71 0 61 73 76
13 2308024432 23080244 赵宇 男 74 74 88 68 70 71
14 2308024446 23080244 周路 女 76 80 0 61 74 80
15 2308024421 23080244 林建祥 男 72 72 81 63 90 75
16 2308024433 23080244 李大强 男 79 76 77 78 70 70
17 2308024428 23080244 李侧通 男 64 96 91 69 60 77
18 2308024402 23080244 王慧 女 73 74 93 70 71 75
19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83
反正是替换成功了
4.数据类型转换
查看数据框各列中的数据类型是否是 int,若不是则需要处理。对于有数据不一致类型的列,找出该列,以进一步对此列数据进行处理。
for i in list(df3.columns):
print(i,df3[i].dtypes)#若某列全部是 int 则显示该列为 int 类型,否则为 object
out:
学号 int64
班级 int64
姓名 object
性别 object
英语 int64
体育 object
军训 object
数分 int64
高代 int64
解几 int64
发现上边“体育”“军训”成绩不是int类型,一会成绩就没法算了,处理一下
df3['体育'] = df3['体育'].astype(int)
df3['军训'] = df3['军训'].astype(int)#转换类型
for i in list(df3.columns):
print(i,df3[i].dtypes)#再瞅瞅转换了没
out:
学号 int64
班级 int64
姓名 object
性别 object
英语 int64
体育 int32
军训 int32
数分 int64
高代 int64
解几 int64
恩 转换成功了
5.增加‘总分’数据列
df3['score']=df3.英语 + df3.体育 + df3.军训 + df3.数分 + df3.高代 + df3.解几#这样貌似就加进去了一列score
df3#瞅瞅
out:
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 score
0 2308024241 23080242 成龙 男 76 78 77 40 23 60 354
1 2308024244 23080242 周怡 女 66 91 75 47 47 44 370
2 2308024251 23080242 张波 男 85 81 75 45 45 60 391
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71 400
4 2308024219 23080242 封印 女 73 88 92 61 47 46 407
5 2308024201 23080242 迟培 男 60 50 89 71 76 71 417
6 2308024347 23080243 李华 女 67 61 84 61 65 78 416
7 2308024307 23080243 陈田 男 76 79 86 69 40 69 419
8 2308024326 23080243 余皓 男 66 67 85 65 61 71 415
9 2308024320 23080243 李嘉 女 62 0 90 60 67 77 356
10 2308024342 23080243 李上初 男 76 90 84 60 66 60 436
11 2308024310 23080243 郭窦 女 79 67 84 64 64 79 437
12 2308024435 23080244 姜毅涛 男 77 71 0 61 73 76 358
13 2308024432 23080244 赵宇 男 74 74 88 68 70 71 445
14 2308024446 23080244 周路 女 76 80 0 61 74 80 371
15 2308024421 23080244 林建祥 男 72 72 81 63 90 75 453
16 2308024433 23080244 李大强 男 79 76 77 78 70 70 450
17 2308024428 23080244 李侧通 男 64 96 91 69 60 77 457
18 2308024402 23080244 王慧 女 73 74 93 70 71 75 456
19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83 457
加进去了!
6.对数据分段打标签
bins = [df3.score.min()-1,400,450,df3.score.max()+1] #划分等级
label = ['一般','较好','优秀']#等级标签
df4 = pd.cut(df3.score,bins,right=False,labels=label)#将成绩分割成不同的数据段并打上标签
df3['类别']=df4#加进去标签这一列
df3#瞅一眼
out:
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 score 类别
0 2308024241 23080242 成龙 男 76 78 77 40 23 60 354 一般
1 2308024244 23080242 周怡 女 66 91 75 47 47 44 370 一般
2 2308024251 23080242 张波 男 85 81 75 45 45 60 391 一般
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71 400 较好
4 2308024219 23080242 封印 女 73 88 92 61 47 46 407 较好
5 2308024201 23080242 迟培 男 60 50 89 71 76 71 417 较好
6 2308024347 23080243 李华 女 67 61 84 61 65 78 416 较好
7 2308024307 23080243 陈田 男 76 79 86 69 40 69 419 较好
8 2308024326 23080243 余皓 男 66 67 85 65 61 71 415 较好
9 2308024320 23080243 李嘉 女 62 0 90 60 67 77 356 一般
10 2308024342 23080243 李上初 男 76 90 84 60 66 60 436 较好
11 2308024310 23080243 郭窦 女 79 67 84 64 64 79 437 较好
12 2308024435 23080244 姜毅涛 男 77 71 0 61 73 76 358 一般
13 2308024432 23080244 赵宇 男 74 74 88 68 70 71 445 较好
14 2308024446 23080244 周路 女 76 80 0 61 74 80 371 一般
15 2308024421 23080244 林建祥 男 72 72 81 63 90 75 453 优秀
16 2308024433 23080244 李大强 男 79 76 77 78 70 70 450 优秀
17 2308024428 23080244 李侧通 男 64 96 91 69 60 77 457 优秀
18 2308024402 23080244 王慧 女 73 74 93 70 71 75 456 优秀
19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83 457 优秀
成功了!
7.导出数据表
df3.to_excel('./新的成绩表.xlsx',sheet_name='Sheet1')
导出成功!
本文地址:https://blog.csdn.net/qq_41046547/article/details/107232626
上一篇: ThreadLocal原理
下一篇: artDialog基本使用