pd.ExcelWriter@python

用python按某一列拆分Excel工作表,将内容写入一个工作簿

本次以“按照表中的某一列,将一张表格拆分为多张表”的需求为例,简单介绍这个过程中用到的pd.ExcelWriter,及每一句的作用。

表
如上表《学生.xlsx》,假设有14万行28列,请按照学校名,拆分表格(不想用复制粘贴)。

writer = pd.ExcelWriter(out_worksheet)

writer对象的一大作用:让数据可以以工作表的分隔方式,不间断地写入工作簿,即得到一个包含多张工作表的工作簿。如果不用它,而是直接指定工作簿的路径,那么即使有循环,最终得到的结果还是只包含一个工作表的工作簿。

代码及解释如下

import pandas as pd
from time import time#用来计算时间,展示进度,减少焦虑

in_ws='学生.xlsx'#给出要拆的表名
out_ws='学生-按学校拆分结果.xlsx'#给出结果工作簿的名称
lie_name='学校'#给出拆分依据的列名

#以上,参数给好了,下面开始拆
start_time=time()#记住开始时间
# ~~~~~~~~~这里路径按自己的需求改,我目前将表放在桌面~~~~~~~~~
file='C:/Users/wowowo/Desktop/'+in_ws
sheet_df = pd.read_excel(file,names=None)#用pandas读取表格内容(有时候会需要加一个参数:encoding="utf-8")
# print(sheet_df.head())#可以查看数据是否读进来了,有无偏差
out_worksheet = 'C:/Users/wowowo/Desktop/' + out_ws
writer = pd.ExcelWriter(out_worksheet)
#这一句的作用是:创建一个工作簿对象,后面to_excel()要用到这个对象writer;
#如果你打印writer,得到的答案是:<pandas.io.excel._xlsxwriter._XlsxWriter object at 0x00000000027B0FA0>;
#插一句:这个工作簿对象writer有save()和close()方法,在写完数据后,要调用二者
#好像是只用save()就可以了,一旦用了save(),工作簿就关了,后面的数据就写不进去了!所以如果有循环,save()要写在循环外面
#seve()和close()的相同之处:都会关闭工作簿,从而事实上阻止后面的数据写入工作簿(即:程序运行不提示错误,但是后面的数据没有写进工作簿);
# 相同之二:save()、close()都只能用一次,如果把save()/close()写在循环里面,会提示:Calling close() on already closed file. 即:这个文件现在已经关掉啦,我没办法再关一次

separatedDataList = list(sheet_df.groupby([lie_name]))
#这一步非常关键,直接将待拆的表,按照指定的列分组,然后装进一个list;
#sheet_df.groupby([lie_name])可以将数据按照lie_name(即学校)分组,但是给出的是个对象,并不是实际数据,如果要查看分组后的数据,目前就是把它list(),然后print(这个list)
# 但是注意,列表中的元素都是tuple,如('实验高中',表格数据blabla  [2694rows x 28 columns])的形式,<class 'tuple'>;
# 而tuple的元素是两个str,<class 'str'>,tuple第一个元素的长度是学校名字的长度(如实验高中则长4),第二个元素的长度是数据行数(如2694行则长2694)
for separatedData in separatedDataList:
    separatedData[1].to_excel(writer, sheet_name=separatedData[0], index=False)
    now_time = time()
    used_time = (now_time - start_time) / 60
    print(separatedData[0], '已处理', len(separatedData[1]), '行,', '已用时:%.2f' % used_time, '分')
writer.save()
# writer.close()#save()与close()都可,二选一,但注意,不要写到for里面去了
print('the end')

好了。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐