Python+excel
联动Excel
基本库
pandas,pandas提供了一个称为DataFrame的数据结构,可以方便地加载、处理和分析表格数据。对于刚创建的虚拟环境,需要安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas openpyxl两个库。openpyxl 是一个用于处理 Excel 文件(.xlsx 格式)的第三方库,用于 pandas 中的 to_excel 方法,所以确保在运行 df.to_excel 之前,openpyxl 已成功安装
举例
创建一个简单的表格
1 | import pandas as pd |
DataFrame是pandas库中的一个类,用于表示二维数据表格,传递一个字典给它,就创建了一个数据框对象,而这个对象的to_excel方法可以将数据框保存为Excel文件
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', index=True, ...)可见,可以设置工作表的名称,index表示是否包含行索引
读取已存在excel数据
1 | import pandas as pd |
用pd的read_excel方法读取文件,df.head()用于返回数据框的前几行,默认为5,该方法通常用于查看开头部分以了解数据结构和其内容
12.28更新:老师给我发了十几份excel文件,让我算每个同学的总分,这里顺便学习记录一下
1 | import pandas as pd |
glob:全称是Global regualar expression print,但在python中,glob模块主要用于文件路径匹配,而不涉及正则表达式,直接理解成global的缩写,用于匹配全局文件路径
pd.concat:用于将多个pandas对象(例如DataFrame)进行纵向连接,一个一个读取,一步一步添加至merged_data(所有内容,在excel中就是复制粘贴的操作) ignore_index=True表示在连接时忽略原来的索引,使用新的连续整数索引,如果不设置,那么连接后的df将保留原来两个df的索引,会导致索引重复
df.columns:用于查看当前df的列名
df.groupby:按照指定的列对df进行分组:.groupby('学生姓名')是一个按照’学生姓名’列进行分组的操作,后续的聚合操作将基于这个分组进行计算;['分数'].sum()表示想要对分数进行聚合操作;.reset_index():将最终结果重新设置索引
完善:上述的结果只会得到:学生姓名+分数两列数据,想要把班级学号也加进去:.groupby(['学生姓名', '学号/工号', '院系', '专业', '班级'])
得到表格后,就可以进行美化了,居中、算平均值之类的。这些操作就不需要在代码里完成了,显然直接操作Excel软件效率更高
代码有代码擅长的事,软件也有软件的优势,根据需求正确选择生产工具从而提高生产力是很重要的
过程中遇到的报错:
PermissionError: [Errno 13] Permission denied: 'D:/Downloads/total_scores1.xlsx'访问错误,就是文件被打开占用了,关闭即可
KeyError: '学生姓名'表明使用groupby操作时,原表格没有名为“学生姓名”的列。实际上是有的,只不过表格第一行是统一的大标题,所以要对每个表格做预处理,把第一行的大标题删了,这样就可以读取到每列的第一行。可以使用
print(merged_data.columns)查看列名