前言
我们之前学习了如何按照特定的需求读取数据,包括读取行,读取列,以及如何批量复制表格,那么大家用的比较多的,其实还是另外两种,将多个表合并为一个表,以及将一个表格拆划分为多个表格
今天我们先来学习一下,如何将多个表格合并为一个表格
我们今天使用到的表格就是我们之前使用的华东.xlsx
这个文件的路径是如下:
下面我们将展示如何使用不同的方法来进行表格的合并
一、pandas合并表格
1.合并同一个工作簿底下多个工作表
import pandas as pd
df=pd.concat([pd.read_excel(r"E:\Python文件夹篇\合并多个表\华东.xlsx",ls)for ls in list1])
df.to_excel(r"E:\Python文件夹篇\合并多个表\华东合并.xlsx")
点击运行后,结果如下:
这样我们就生成了一个新的表格:上海南京合并.xlsx
表格的内容如下:
当然,我们可以将上面的代码略微改动一下
import pandas as pd
df=pd.concat([pd.read_excel(r"E:\Python文件夹篇\合并多个表\华东.xlsx",ls)for ls in list1],keys=["上海","南京"])
df.to_excel(r"E:\Python文件夹篇\合并多个表\上海南京合并.xlsx")
这里我们给每一个放进去合并的表格加了一个标签
,结果也是会生成一个新的表格,表格的内容如下:
2.可以直接使用的代码
那么肯定很多朋友想要一个可以直接使用的代码,不要着急,就在下面:
import pandas as pd
fileneme=r"E:\Python文件夹篇\合并多个表\华东.xlsx" #这里将括号里面的内容替换为你想要合并的工作簿所在的路径
list1=["上海","南京","无锡"] #这里将括号里面的内容替换为你想要合并的工作表的名字
df=pd.concat([pd.read_excel(fileneme,ls)for ls in list1])
df.to_excel(r"C:\Users\Admin\Desktop\合并表格.xlsx",index=False)
我们将上面的代码放进pycharm,然后将第二行双引号里面的内容替换为我们想要合并的工作表所在的工作簿的路径,将第三行list1中括号里面的内容替换为我们想要合并的工作表的名字
比如:我想合并上海,南京和无锡这三个工作表,所以第三行就是用双引号分别把三个表的名字括起来,中间使用逗号隔开,然后这三个表在华东.xlsx这个工作簿,所以我们在第二行填写华东.xlsx这个工作簿的路径,它在E盘里面的Python文件夹篇这个文件夹里面的合并多个表这个文件夹中,所以我们用上述代码的形式来表示它的路径
最后,我们会将生成的表格放在我们的桌面上,它的名字叫做;合并表格.xlsx
我们返回桌面找到这个新生成的工作簿就可以看到合并后的内容了。
3.合并同一个工作簿底下全部工作表(可直接使用)
如果一路跟着学过来,那么大家也许会觉得合并全部工作表很简单,直接把sheet_name的值设置为None,让它读取全部的工作表,不就行了吗,我们试一下输入下面代码:
import pandas as pd
fileneme=r"E:\Python文件夹篇\合并多个表\华东.xlsx" #这里将括号里面的内容替换为你想要合并的工作簿所在的路径
df=pd.concat(pd.read_excel(fileneme,sheet_name=None))
df.to_excel(r"C:\Users\Admin\Desktop\合并全部表格.xlsx",index=False)
点击运行后,会在桌面生成一个新的表格:合并全部表格.xlsx
我们打开表格后,内容如下:
可以看到,数据成功合并,
其实,和你想的一样,合并全部表格的数据,确实很简单
二、使用xlwings合并全部工作表(可以直接使用)
import xlwings as xw
fileneme=r"E:\Python文件夹篇\合并多个表\华东.xlsx"
app = xw.App(visible = False,add_book = False)
wb1 = app.books.open(fileneme)
wb2 = app.books.add()
ws2 = wb2.sheets[0]
for s in wb1.sheets:
s.used_range[1:,:].copy()
ws2.used_range[-1:,:].offset(row_offset = 1).paste()
ws2['1:1'].value = wb1.sheets[0].range('A1:I1').value
ws2.autofit()
wb2.save(r"C:\Users\Admin\Desktop\合并全部表格.xlsx")
wb2.close()
wb1.close()
app.quit()
和上面的一样,我们只需要将第二行代码双引号里面的值改为要合并的工作簿的路径就行
那么如何使用xlwings合并多个指定的表格呢?
比如我们想合并上海和南京这两个表,又应该怎样写代码呢?
大家可以自行发挥想象力,这里就不多说了。
三、使用openpyxl合并多个工作表
import openpyxl
wb = openpyxl.load_workbook(r"E:\Python文件夹篇\合并多个表\华东.xlsx")
nwb = openpyxl.Workbook()
kw = ['工作表名', '片区', '订单来源', '接单时间', '订单编号', '包装方式',
'产品', '订单数', '入库日期', '入库数']
nwb.active.append(kw)
for s in wb.worksheets:
if s.title == '苏州' or s.title == '杭州':
for r in list(s.values)[1:]:
nwb.active.append((s.title,) + r)
nwb.active.title = '订单表'
nwb.save(r"C:\Users\Admin\Desktop\合并全部表格222.xlsx")
运行结果如下:
同样的,如何使用openpyxl合并所有的工作表呢?大家可以自行想象随意发挥。
总结
今天我们学习了使用pandas,openpyxl和xlwings这三个库来合并多个表格以及合并全部表格。
但是很多时候,我们还需要合并不同的工作簿,或者将一个表格按照某一列拆分为多个表格,这些又该怎么做呢?
感兴趣的朋友可以点个关注和订阅,我们将在后面一一为大家揭晓。