6.数据处理实例

6.1.数据如图:

       

python数据处理编程 python数据处理案例_缺失值

6.2.需求:

     

python数据处理编程 python数据处理案例_pandas_02

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的大数据分析基础及实战》