python将多个excel合并或拆分

版权声明:欢迎转载,知识无界注明出处即可 https://blog.csdn.net/Arwen_H/article/details/82498437

昨天有朋友问我怎么将一个excel工作簿下面的很多个工作表进行合并生成一个表,这篇文章就针对此类场景来进行讨论。如何用python释放双手,提高工作效率!python能合并的不光是excel,还有其他类型的很多文本。今天主要讲excel合并的思路,其他的可以自行尝试。


为什么要这么做
有个业务数据是需要多个人每天分工将不同的部分存储到一个sheet里面,那么日积月累就会有很多个sheet。这时领导给你说,你帮我分析一下上个月的数据时。你看到这个表会是有多崩溃,因为你的透视一下吧。透视得在一个sheet里面吧!得放一个sheet里面得一个表一个表的复制吧。但是当你会python你会发现这种事是多么的简单,而且还能自动化每天自动合并完全不用人操心。
场景
excel合并主要有两个场景(一个xlsx的文件我们叫工作簿,一个工作簿里面的表我们叫sheet):1.将一个工作簿下的多个表进行合并;2.将多个工作簿进行合并;(这是最简单的场景,还有稍微复杂一点的)
python思路
1.导入数据是第一步也是最基础的;2.数据处理是第二部,这里你的场景是啥都是在这个环节进行加工;3.数据输出,将你加工好的数据进行输出;
代码详解

  • 将多个sheet合并成一个sheet
    网上百度我发现写法很多,不过还不是最简便的。我使用的是pandas库,本文使用的数据。这里的场景是各个sheet字段都是相同的类型的情景,也不需要再额外进行数据处理。
import pandas as pd #导入pandas库
zx=pd.ExcelFile(r'C:\Users\huangjunwen\Desktop\电商商品评论.xlsx')#获取工作簿里面的属性
data=zx.parse(zx.sheet_names) #调用属性中的所有sheet名称并将数传入变量data
data=pd.concat(data)#合并变量中的所有表组成新的DataFrame
data.to_excel(r'C:\Users\huangjunwen\Desktop\data.xlsx',index=False)#输出excel文件到桌面,不展示索引
  • 将一个sheet拆分成多个sheet
    继续使用刚才合并后的数据,我们现在来根据日期这个维度进行一表拆成多表
import pandas as pd
data=pd.read_excel(r'C:\Users\huangjunwen\Desktop\data.xlsx')#导入数据
data['日期']=pd.to_datetime(data['时间']).dt.date #获取表中的日期部分并行增加一列日期字段
data_excel=[] #建一个用于存储多个sheet的空集
sheetname=[] #建议一个用于存储多个sheet名称的空集
for x in data.groupby('日期'): #根据日期字段进行分组
    data_excel.append(x[1]) #将拆分的sheet存储到data_excle里面
    sheetname.append(x[0]) #将拆分的sheet名称存储到sheetname里面
writer=pd.ExcelWriter(r'C:\Users\huangjunwen\Desktop\data1.xlsx')#定义一个最终文件存储的对象,防止覆盖
for i in range(len(sheetname)):#创建一个循环将多个sheet输出
    data_excel[i].iloc[:,0:9].to_excel(writer,sheet_name=str(sheetname[i]),index=False)
    #循环将多个sheet表中的数据及对应的sheet表名称输出至桌面,并且不展示索引
  • 将一个工作簿拆分成多个
    将一个工作簿也就是一个excel拆分成多个excel,思路和一个工作表sheet拆分成多个sheet一样。只是最后输出的时候输出多个excel而不是多个sheet。
import pandas as pd
data=pd.read_excel(r'C:\Users\huangjunwen\Desktop\data.xlsx')
data['日期']=pd.to_datetime(data['时间']).dt.date
data_excel=[]
sheetname=[]
for x in data.groupby('日期'):
    data_excel.append(x[1])
    sheetname.append(x[0])
for i in range(len(sheetname)): #区别在于循环创建多个路径,路径中加入变量工作表名称
    data_excel[i].iloc[:,0:9].to_excel(r"C:\Users\huangjunwen\Desktop、data\\" + str(sheetname[i]) + ".xlsx")
    #桌面新建了一个data文件夹,将拆分的工作簿输出到这里
  • 将多个工作不合并成一个
    要将多个工作簿合并到一个,思路是先获取所有工作簿将数据导入,然后进行数据合并,最后输出成一个。区别在于如何获取所有工作簿的路径
import pandas as pd
import os #用到的一个新库
op=r'C:\Users\huangjunwen\Desktop\data\\' #定义一下数据存放的文件夹路径
name_list=os.listdir(op) #用os库获取该文件夹下的文件名称
data=[] 
for x in range(len(name_list)):
    df=pd.read_excel(op+name_list[x])#循环导入多个excel文件
    data.append(df)#将每个excel写入到data变量中
data=pd.concat(data)#合并data变量,转化成Dataframe
data.to_excel(r'C:\Users\huangjunwen\Desktop\data3.xlsx',index=False)#输出合并后的excel

猜你喜欢

转载自blog.csdn.net/Arwen_H/article/details/82498437