我们在工作中经常会遇到合并Excel文件的情况,一个个手动复制粘贴很枯燥,还容易出错,假如有一个程序可以帮助我们重复这些机械的动作,不仅可以提高我们的工作效率,也可以保证准确性。下面我们就利用Python来实现对Excel文件的三种合并:
-
多个Excel文件(仅一个sheet)合并至同一个Excel文件;
-
多个Excel文件(多个sheet)合并至同一个Excel文件;
-
多个Excel文件(多个sheet)合并至同一个Excel文件(不同sheet)。
一、多个Excel文件(仅一个sheet)合并至同一个Excel文件
解题思路:
-
首先获取这个文件夹下面的所有Excel文件名称;
-
然后读取Excel文件,将数据赋值给一个变量,读取第二个Excel文件,然后将数据再合并至变量,以此类推;
-
最后将变量存储至Excel文件里面。
代码实现:
import pandas as pd#读取、更改、保存Excel文件
import os#获取Excel文件名
path="F:/test/"#更改为Excel的存放路径
xlsx_names=[x for x in os.listdir(path) if x.endswith(".xlsx")]
#利用for循环获取文件夹下的全部Excel文件名称,endswith用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False,防止读取非Excel文件。
#我们需要对Excel文件多次重复打开、更改、保存、关闭的操作,借助with语句使代码更简化,具体解释可以查阅https://www.runoob.com/python3/python-with.html
with pd.ExcelWriter(path + "Excel合并.xlsx",engine='openpyxl',mode='w+') as writer:
frames=[]#借助该列表变量实现数据的传递
for xlsx_name in xlsx_names:#遍历所有Excel文件名
df_=pd.read_excel(path + xlsx_name)# read_excel读取Excel文件,path路径+Excel文件名,构成完整路径
frames.append(df_)#将Excel文件的数据传递给列表变量frames,append用于在列表末尾添加新的对象。
df=pd.concat(frames,axis=0)# concat为拼接函数,axis=0,纵向拼接(默认)axis=1,横向拼接;并实现从一维列表向二维数据表的转变。
df.to_excel(excel_writer=writer,index=False)#将拼接好的二维数据存储至Excel文件,writer即为for循环前面的with语句,excel_writer=writer指定存储路径,index=False不要索引
print("完成文件合并")#提示代码运行完毕
二、多个Excel文件(多个sheet)合并至同一个Excel文件
有的时候一个Excel文件里面会有多个sheet表,我们也需要把其中的数据提取出来,在上面代码的基础上,我们改动一下。
解决思路与第一种合并方式相似,只是第一步要再增加一步
-
不仅要获取文件夹下面的所有Excel文件名称,还要获取所有Excel文件中所有sheet的名称;
-
然后读取每个Excel文件中每个sheet表,将数据赋值给一个变量,读取第二个Excel文件,然后将数据再合并至变量,以此类推;
-
最后将变量存储至Excel文件里面。
代码实现
import pandas as pd
import os
path="F:/test/"
xlsx_names=[x for x in os.listdir(path) if x.endswith(".xlsx")]
with pd.ExcelWriter(path + "Excel合并.xlsx",engine='openpyxl',mode='w+') as writer:
frames=[]
for xlsx_name in xlsx_names:
#至此,以上所有代码都与第一种合并方式相同,下面再加一层for循环,获取Excel文件的sheet表
sheet_na=pd.ExcelFile(path+xlsx_name).sheet_names
for sheet_name in sheet_na:#对同一个Excel文件下每个sheet表进行循环
df_=pd.read_excel(path + xlsx_name,sheet_name=sheet_name)#这里读取Excel文件是要指定sheet名称,以获取对应sheet的数据,下面代码与第一种合并方式的代码就相同了
frames.append(df_)
df=pd.concat(frames,axis=0)
df.to_excel(excel_writer=writer,index=False)
print("完成文件合并")
关于第三种合并方式(多个Excel文件(多个sheet)合并至同一个Excel文件(不同sheet),大家可以根据前两种合并的代码探索一下,下一期我附上我写的完整代码。
写在最后
开始在网上找资料的时候,有很多种方式,但发现不太易于我自己理解,在别人的解决方案上慢慢探索自己的解决方案,这个探索的过程还是有种甘甜的开心。
文章评论