首页 其他 pandas合并多个excel文件(pandas Excel合并单元格)

pandas合并多个excel文件(pandas Excel合并单元格)

其他 166
广告一

工作当中免不了遇到需要合并多个文件的情况,excel或者csv等等,如果是小量的,那挨个打开复制粘贴就行了,如果100个呢?如果是每天或者经常需要合并呢?

自从学习了pandas后,我发现用它来合并excel居然很快,多种情况都能自如的完成,代码比VBA还简洁,一起来看下吧!

我们通常遇到的一种合并需求是有多个文件,每个文件又是相同的,就是说每个文件里面都有相同的sheet名,我们需要做的就是把所有相同的sheet名的文件全部复制到一个文件当中,但是我们还有可能遇到其他的合并的场景:

多个文件合并每个文件的一个sheet到一个文件中单个文件,合并所有的sheet多个文件,多个sheet需要合并,这也是最复杂的情况

你是会选择复制粘贴呢还是利用代码实现自动化合并呢?

今天就来看看在pandas的世界里面,这件小事有多简单:

需要用到Tkinter,pandas的read_excel,pd.to_excel场景1:合并到一个sheet:读取多个文件中的某个sheet合并到一个sheet导出一个单独的文件关键点:

需要明确sheet名在多个文件名中建立循环shname="har_train"print("请选择文件:")root = tk.Tk()root.withdraw()file_path = filedialog.askopenfilenames()file_list=[]for each in file_path: print('正在读取:%s'%each) each=pd.read_excel(each,sheet_name=shname) file_list.append(each)print('正在合并数据,请稍等...')result=pd.concat(file_list)result.to_excel("合并结果.xlsx",sheet_name=shname,index=0)print('合并完成')shname="har_train":设置你需要合并的sheet名

将一个文件中的所有sheet合并到一个sheet,需要指定合并的sheet名列表关键点:

当处理一个文件时,不用考虑文件名循环的问题但是需要考虑多个sheet名的问题所以就有两种情况:1、指定合并的sheet名。2、默认合并所有的sheetprint("请选择文件:")root = tk.Tk()root.withdraw()file_path = filedialog.askopenfilename()file_list=[]sheet_names=[]for each in sheet_names: print('正在读取:%s'%each) each=pd.read_excel(file_path,sheet_name=each) file_list.append(each)print('正在合并数据,请稍等...')result=pd.concat(file_list)result.to_excel("合并结果.xlsx",index=0)print('合并完成')sheet_names=[]:这是第一种情况,需要你提供指定的sheets名称,建议你这么做

第二种:

print("请选择文件:")root = tk.Tk()root.withdraw()file_path = filedialog.askopenfilename()excel = pd.ExcelFile(file_path)file_list=[]for each in excel.sheet_names: print('正在读取:%s'%each) each=pd.read_excel(file_path,sheet_name=each) file_list.append(each)print('正在合并数据,请稍等...')result=pd.concat(file_list)result.to_excel("合并结果.xlsx",index=0)print('合并完成')excel.sheet_names:默认在所有的sheet中建立循环读取

场景3:将多个文件的多个sheet分别合并,支持合并到一个文件,也可以单独导出,需要指出合并的sheet名

这也是最难的情况,靠人工肯定是不行了

关键点:

需要建立两个循环:文件名循环,sheet名循环需要指定sheet名或者默认合并所有所有的合并都需要建立的根基是:合并相同的sheet名如何把每个合并后的文件写入到一个工作簿中shname=[]#提供一个已知的sheet名列表print("请选择文件:")root = tk.Tk()root.withdraw()file_path = filedialog.askopenfilenames()writer=pd.ExcelWriter("合并结果.xlsx")for sh in shname: file_list=[] for each in file_path: print('正在读取:%s的%s'%(each,sh)) each=pd.read_excel(each,sheet_name=sh) file_list.append(each) print('正在合并数据%s'%sh) result=pd.concat(file_list) result.to_excel(writer,sh,index=0) print('%s合并完成'%sh)writer.save()print('全部合并完成')shname=[]:需要你提供合并的sheet名

如果很多sheet,手工输入也确实太麻烦了:

我们如果可以确定一个文件,这个文件的sheet名包含了所有需要合并的sheet名,也可以这样指定列表:

print("请选择文件:")root = tk.Tk()root.withdraw()file_path = filedialog.askopenfilename()excel = pd.ExcelFile(file_path)shname=excel.sheet_names天色不早了,洗洗睡了

广告一