表格内容如下:
现在要做的是,把6个sheet合并成一个表格。
1.excel合并工作表
首先,探讨一下直接用excel来解决这个问题,在excel2016及以后的版本中,有一个强大的PowerQuery查询:
选择文件后:
点“编辑”以后,大概如下:
网上有些人的版本中有“将查询追加为新查询”这个功能,但是我的excel2016中没有这个选项,只能点击“追加查询"这个功能:
上图的意思是将sheet2追加到sheet1中去,追加后sheet1的内容如下:
我对这个powerQuery不是很熟练,上面合并的工作表一次只能合并一张工作表,看起来效率也不算高,暂时还不晓得其它方法。除了这种方法以外,可能只有使用VBA宏来解决这个问题了。
2.pandas合并工作表
四个字:非常简单!
简单得出乎的意料!
代码如下:
import pandas as pd
#依次读取前面6个工作表到DataFrame中,dfs里面是由6个DataFrame组成的数组
dfs = [pd.read_excel("test.xls",sheet_name=index) for index in range(6)]
#连接dfs里面的6个DataFrame
pd.concat(dfs).to_excel("text1.xlsx")
三行代码搞定!
而且居然自动忽略掉其它工作表的表头,只保留第一个工作表的标题栏,这确实很有意思,非常赞。
3.pandas合并工作表第二种方法
依然非常简单:
import pandas as pd
#sheet_name=None的意思是,一次性将所有的工作表都读取出来
dfs2 = pd.read_excel("test.xls",sheet_name=None)
pd.concat(dfs2).to_excel("text.xlsx")
执行结果如下:
可以看出,除了前面多了一行索引列以外,其它内容没有变化,依然没有标题栏。
总结
可以看出,如果要在excel中完成合并工作表并不容易,对excel版本有要求,或者VBA。而采用pandas则非常简单,基本上就两行代码,效果出其的好!