(Python)复杂数据处理

题目描述:

#复杂数据处理:从文件中读取二维数据到二维列表中

#要求:模块化程序设计

#模块1:用来读取数据,并将其存至二维列表中

#模块2:处理二维列表数据,并得到结果

在主程序中输出综合成绩的方差和中位数

 

准备工作:

安装第三方库,本次作业需要用到的第三方库如下:

pandas——一个强大的分析结构化数据的工具集,基于numpy扩展而来,提供了一批标准的数据模型和大量便捷处理数据的函数和方法。

numpy——NumPy 是使用 Python 进行科学计算所需的基础包。用来存储和处理大型矩阵,如矩阵运算、矢量处理、N维数据变换等。

openpyxl——是个读写 Excel 2010 xlsx/xlsm/xltx/xltm 的 Python 库,简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点。

 

安装方法:通过pip安装

教程可见:Python如何安装pandas库,简单3步解决,亲测有效。_lleen-Lee的博客-CSDN博客_python安装pandas

       如何VS中检查并安装numpy,pandas,matplotlib,scipy等第三方库_湘玄书生的博客-CSDN博客_vs 安装pandas

 

IPO:

通过文件(Excel)输入需要进行处理的表格,通过对表格数据分析处理,得到需要的结果。

 #复杂数据处理:从文件中读取二维数据到二维列表中 :调用pandas包方法对Excel进行处理

#要求:模块化程序设计 : 使用def()函数将函数模块化

 

代码如下:

import pandas as pd

def read_file(filename):        #读取filename数据,将其转换为二维列表并返回
    ls = pd.read_excel(filename).values.tolist()
    return ls

def process_deta(ls):
    p = len(ls)      #返回二维列表表中一维列表个数
    for item in ls:
        comp = sum(item[4:10])/6 * 0.4 + item[10] *2 + item[-1] * 0.4    #综合成绩计算公式
        item.append(round(comp,1))      #将综合成绩添加到一维列表中
                                        #round()函数,此处意思将comp四舍五入为一位小数
    lst = [x[-1] for x in ls]        #新建综合成绩列表
    avg = sum(lst)/p        #返回综合成绩平均值列表
    fc = sum([(x-avg)**2 for x in lst])/p       #返回综合成绩方差列表
    if p%2 != 0:        #求综合成绩中位数
        median = ls[p//2][-1]
    else:
        median = (ls[p//2-1][-1] + ls[p//2][-1])/2   
    return fc,median

if __name__ == '__main__':
    ls = read_file("python平时成绩登记表.xlsx")
    print('方差为:{:.1f}\n中位数为:{:.1f}'.format(*process_deta(ls)))

 

 

笔记:

import pandas as pd                                     :引入pandas库

ls = pd.read_excel(filename).values.tolist()  :通过pandas方法表示读取表格数据,并将其转换为二维列表,用ls命名

item.append(round(comp,1))                        :round()函数,表示将浮点数进行四舍五入到小数点后某位

if __name__ == '__main__':                           :当前我的理解: 表示只在当前模块运行时,运行该串if后的代码,

                  如果我的这份.py文件被新建的项目import引用时,不会运行这串代码之后的内容,

                            同时也有c中int main()的主函数入口的作用,

                  具体更多解释参考下面大佬:

                              Python中的 if __name__ == "__main__"到底是个啥意思?_大表哥在曾母暗沙的博客-CSDN博客

               if __name__ == '__main__' 如何正确理解? - 知乎 (zhihu.com)

                       (多看几遍后就清晰了)

....format(*process_deta(ls)))                         :*参数,表示可变参数(任意参数),

                      一个*号表示传入的参数储存为一个元组(tuple),

                      两个*号表示传入的参数储存为字典(dict)

 

注意:

我所调用的“python平时成绩表.xlsx"使用的为相对地址,要与.py文件在同一个文件夹

示例表格预览:

 

 

运行结果:

 

 

 

本次作业完美,继续加油

 

posted @ 2022-10-30 18:33  蜗牛诶  阅读(113)  评论(0)    收藏  举报