2018-04-08学习笔记:
在之前的文章写过,使用Power Query可以合并多文件,多工作薄和多文件夹的合并。古语有云:分久必合,合久必分。
有合并,就需要有拆分,今天就来讲一讲使用Python将一个工作薄拆分成多个表的故事。
拆分套路1:将数据按地市拆分成多个工作薄
有一份7W条数据的工作薄,现在需要拆分成每个地市一个工作薄,
首先导入来看一下有多少个地市
import pandas as pd #导入模块
wb = pd.read_excel(r'd:\Me_py\everyday_py\资料\2018-04-08.xlsx') #打开工作薄
col = wb['地市'].unique() #对地市列去重复
print(col)
pd.read_excel函数:打开指定路径的工作薄,并赋值给wb变量
wb['地市'].unique():取地市列的唯一值,也就是去重复操作
print(col)打印,得到14个地市,那么就需要拆分成14个工作薄,
完整的6行代码:
import pandas as pd #导入模块
wb = pd.read_excel(r'd:\Me_py\everyday_py\资料\2018-04-08.xlsx') #打开工作薄
col = wb['地市'].unique() #对地市列去重复
for x in col:
child_wb = wb[wb['地市'] == x] #循环,得到每一个地市列表,
child_wb.to_excel(x+'.xlsx',index=False) #将得到的表保存成Excel格式
child_wb = wb[wb['地市'] == x] 循环col中的每个地市,然后去wb中筛选。
例如当x循环到百色的时候,wb[wb['地市'] == '百色'] 此时child_wb等于百色地市的所有数据表,然后使用to_excecl保存成Excel格式。
拆分套路2:将数据按地市拆分成一个工作薄的多张Sheet
同样是按地市拆分,每个地市一个Sheet表效果如下:
代码比套路1的多了三行:
import pandas as pd #导入模块
wb = pd.read_excel(r'd:\Me_py\everyday_py\资料\2018-04-08.xlsx') #打开工作薄
col = wb['地市'].unique() #对地市列去重复
new_wb = pd.ExcelWriter('拆分表.xlsx') #新建一个工作薄
for x in col:
child_wb = wb[wb['地市'] == x] #循环,得到每一个地市列表,
child_wb.to_excel(new_wb,index=False,sheet_name=x) #将得到的表保存成Excel格式
new_wb.save()
new_wb = pd.ExcelWriter('拆分表.xlsx') 新建一个工作薄;
然后循环地市,得到每个地市的子表child_wb = wb[wb['地市'] == x];
将所有子表写入新建的工作薄中 child_wb.to_excel(new_wb,index=False,sheet_name=x);
最后保存新建的工作薄 new_wb.save()
拆分套路3:将数据按地市拆分成多个工作薄,并且每个地市还需要按网别拆分Sheet
将问题继续升华,同样是按照地市拆分成多个工作薄,然而在每个地市的表中继续按照网别进行拆分,效果如下:
完整的代码
import pandas as pd #导入模块
wb = pd.read_excel(r'd:\Me_py\everyday_py\资料\2018-04-08.xlsx') #打开工作薄
col = wb['地市'].unique() #对地市列去重复
for x in col:
child_wb = wb[wb['地市'] == x] #循环地市,得到每个地市的子表
new_wb = pd.ExcelWriter(x + '.xlsx') # 按照每个地市新建一个工作薄
network_col = child_wb['网别'].unique() #对每个地市子表中的网别列去重复
for y in network_col:
network_sheet = child_wb[child_wb['网别'] == y] #在地市子表内循环网别,得到单个地市的网别子表
network_sheet.to_excel(new_wb,index=False,sheet_name=y) #将网别子表保存导对应的地市工作薄中
new_wb.save() #保存地市工作薄
思路是先循环地市,按照地市保存Excel工作薄,然后在每个地市的子表中进行第二次循环,得到每个地市的网别的sheet,最后把网别sheet写入对应的地市工作薄中并保存。