(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文件在同一个文件夹
示例表格预览:

运行结果:

本次作业完美,继续加油

浙公网安备 33010602011771号