今天讲一下:
如何将数据分析结果存放于同一Excel文件中的不同Sheet页
先回顾一下:
学习笔记的第一篇,就讲过了如何利用Pandas的read_excel和to_excel方法从excel文件中读取数据和写Excel文件,其中讲到写Excel时,我们只写了一张表,因为如果使用to_excel(文件名)这种方法,第二次写文件时会直接覆盖上一次写的结果,那就永远只有最后一次写入的那张表。
今天本来是想讲一下openpyxl模块的,但后来发现pandas的to_excel方法其实也能写多个sheet页,所以我先看这个方法:
1、需要用到模块
pandas datetime
先引入这两个武器:
import pandas as pd
import datetime as dt
2、准备工作:
我们使用上篇那个test009.xlsx文件,不再另外准备数据表了。
3、先导入费用表和部门信息表
bf = pd.read_excel("d:\\data\\test009.xlsx",sheet_name="费用")
bm = pd.read_excel("d:\\data\\test009.xlsx",sheet_name="部门")
4、组合两张表数据:
df = pd.merge(bf,bm,left_on="工号",right_on="employee ID")
5、今天的任务是把组合后的数据中“工号”、“姓名”、“报销日期”、“费用类型”、“报销金额”、“部门”等列的数据,按9月和10月时间过滤,分别存入一个excel表中的两个sheet页,sheet页名分别为"Sep"和"Oct"
6、先把数据过滤出来:
df09 = df[["工号","姓名_x","报销日期","费用类型","报销金额","部门"]].where(df["报销日期"] < dt.datetime(,10,1))
df10 = df[["工号","姓名_x","报销日期","费用类型","报销金额","部门"]].where(df["报销日期"] >= dt.datetime(,10,1))
上面语句中,dt.datetime(,10,1)方法用于“构造”一个datetime标准时间,它的值为“-10-01 00:00:00 000000",报销日期小于它的数据则是9月份的报销记录,报销日期大于等于它的,则是10月份的报销记录。两条命令运行后的结果如下:
我们可以发现两个结果中都存在许多缺失值的数据行,这是因为我们使用where方法对原数据集df进行过滤时,它会每行去进行匹配筛选,如符合,则取原值,如不符合,则设为缺失值,因此,在存入excel文件之前,我们还需要使用dropna方法把缺失值的数据行都删除:
df09 = df09.dropna()
df10 = df10.dropna()
7、将df09和df10数据写入excel文件:
writer = pd.ExcelWriter('d:\\data\\test010.xlsx')
df09.to_excel(writer, sheet_name="Sep",index=False)
df10.to_excel(writer, sheet_name="Oct",index=False)
writer.save()
writer.close()
结果如下:
上面主要是使用ExcelWriter方法,在内存中先创建了一个Excelbook的writer对象,然后在内存中对其进行操作,无论你写多少张sheet页,在save前,都不会影响实际的文件内容,因此,写完所有数据后,还需要使用save方法保存到文件中,并将writer对象关闭。
今天就先总结到这儿,如果大家有什么问题,可在公众号后台给我留言,在我能力圈内的,尽快给大家回复。
下篇预告:
讲一下pandas中另一种数据透视表方法