6.数据处理实例
6.1.数据如图:

6.2.需求:

6.3.处理数据:
我个人拿到数据,直接想着转换成DataFrame,然后着手算总分,然后直接数据分组,还是太年轻了...
self.df["total"] = self.df.英语 + self.df.体育 + self.df.军训 + self.df.数分 + self.df.高代 +self.df.解几结果报错,嗯,这就是急于求成的后果,下次敲代码前先对数据观察处理吧!!!
开始处理,问题一思路及代码如下.
# -*- coding: UTF-8 -*-
'''
@Author :Jason
数据处理实例
'''
import pandas as pd
from pandas import DataFrame,Series
class DataProcessingEg(object):
def __init__(self):
self.df = pd.read_excel(r"./File/egGrade.xlsx")
def questionsOne(self):
#1.观察数据,有重复先去重
df = self.df.drop_duplicates()
#2.数据量小,一眼看出,将缺失值和汉字替换掉
df1 = df.fillna(value=0)
df2 = df1.replace(["作弊","缺考"],[0,0])
# print(df1)
#数据表添加两列,各科总分
df2["score"] = df2.英语 + df2.体育 + df2.军训 + df2.数分 + df2.高代 +df2.解几
# print(df2["score"])
'''
0 354
1 370
2 391
3 400
4 407
5 417
6 416
7 419
8 415
9 356
10 436
11 437
12 358
13 445
14 371
15 453
16 450
17 457
18 456
19 457
Name: total, dtype: int64
'''
bins = [df2["score"].min()-1,400,450,df2["score"].max()+1]
lable = ["一般","较好","优秀"]
df2["type"]= pd.cut(df2["score"],bins,right=False,labels=lable)
print(df2)
'''
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 score type
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 优秀
'''
if __name__ == "__main__":
DPE = DataProcessingEg()
DPE.questionsOne()反思:
问题一到此解决了,和大佬的解题思路对比了,发现还是漏洞百出,虽然最终还是解决了,但是。。。哎
还缺少数据处理中的处理空格,成绩判断是否为整数等
eg:
df["colIndex"].astype(str).map(str.strip()) #去除空格
for i in list(de.colimns):
if df[i].dtype == "O":#查看数据类型,若某列全是int,则显示为int,否则object
print(i) #打印出来的就有不是int类型的问题二 由于"军训"这门课程的成绩与其他科目成绩差异较大,并且给分 较为随意,为了避免给同学评定奖学金带来不公平,请将每位同学的各科成绩 标准化,再汇总,并标出“一般”“较好”“优秀”三种类别。
def questionsTwo(self):
#输出清洗和处理
df = self.df.drop_duplicates().fillna(value=0).replace(["作弊","缺考"],0)
for i in list(df.columns[4:]):
df[i] = (df[i]-df[i].min())/(df[i].max()-min(df[i]))
df["score"] = df["英语"]+df["体育"]+df["军训"]+df["数分"]+df["高代"]+df["解几"]
#打印score的各种参数
print(df["score"].describe())
'''
count 20.000000
mean 3.892161
std 0.668808
min 2.536788
25% 3.534346
50% 3.823450
75% 4.431060
max 5.112427
Name: score, dtype: float64
'''
#至于具体的类别,和上面是一样的了参照:《基于Python的大数据分析基础及实战》
















