欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 大数据之学习成绩处理案例(一)

程序员文章站 2023-08-27 11:57:22
大数据之学习成绩处理案例来自学了两天python的NewBee-Yunzi的第一个案例总结:这个案例学习如何处理数据表中的重复值,异常值,空值,空格,根据条件对值进行分级。有这么个数据表:学号 姓名 性别 英语 体育 军训 数分 高代 解几2308024241 成龙 男 76 78 77 40 23 602308024244 周怡 女 66 91 75 47 47 442308024251 张波 男 85 81 75 45 45 60...

大数据之学习成绩处理案例

来自学了两天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