如果你熟练使用Excel的话,你就会发现有些pandas的功能,在Excel中也可以实现,而且对比下来,Excel操作更简单,从效率上跟pandas更无二致,这样Excel的优势就比较突出了,比如下面使用pandas和Excel分别用来实现表格合并。
1.pandas批量合并表格使用pandas批量合并表格数据,适用于数据量比较大的批量数据,使用编程的方式,借助Python中的两个标准库pandas和os库,来实现表格的批量合并,下面先了解一下这两个库的作用。
1.1 Pandas
pandas是python的一个数据分析包pandas是基于NumPy 解决数据分析任务的一种工具pandas 纳入了大量库和一些标准的数据模型pandas提供了高效地操作大型数据集所需的工具1.2 Os库
os库提供通用的、基本的操作系统交互功能os库包含路径操作、进程管理、环境参数等处理函数1.3 代码演示
下面实际运用代码进行批量处理表格数据。
第一步、导入批量处理数据所需的Python标准库。
# 导入库import pandas as pdimport os第二步、设置待读取文件夹、待保存的文件夹以及待保存的表格名。
# 待读取批量csv的文件夹read_path = 'C:\\Users\\shangtianqiang\\Desktop\\data'# 待保存的合并后的csv的文件夹,在路径自己建立一个data_merge文件夹save_path = 'C:\\Users\\shangtianqiang\\Desktop\\data_merge'# 待保存的合并后的表格名csvsave_name = 'hebing.csv'第三步、借助os库修改当前工作目录。
#修改当前工作目录os.chdir(read_path)第四步、将该文件夹下的所有文件名存入一个列表。
#将该文件夹下的所有文件名存入一个列表file_list = os.listdir()第五步、读取第一个CSV文件并包含表头,注意数据的编码方式。
#读取第一个CSV文件并包含表头df = pd.read_csv(read_path +'\\'+ file_list[0],encoding = 'gbk') #编码默认UTF-8,若乱码自行更改为gbk第六步、将读取的第一个CSV文件写入合并后的文件保存。
#将读取的第一个CSV文件写入合并后的文件保存df.to_csv(save_path+'\\'+ save_name,encoding="utf_8_sig",index=False)第七步、循环遍历列表中每一个表格的文件名,并且逐个追加到合并后的文件夹内,这里已经导入了第一个表格的数据,所以,这里FileStart=1,而不是FileStart=0。
#循环遍历列表中各个CSV文件名,并追加到合并后的文件FileStart = 1FileEnd = len(file_list)for i in range(FileStart,FileEnd): df = pd.read_csv(read_path + '\\'+ file_list[i],encoding = 'gbk') # 编码默认UTF-8,若乱码自行更改为gbk df.to_csv(save_path+'\\'+ save_name,encoding="utf_8_sig",index=False, header=False, mode='a+')这里逐一演示代码的运行,可以调试完毕后,将代码封装在一起,针对大批量的数据,这个方法既快捷,又高效,但pandas批量合并数据依托于编译环境和Python库,很多用户在创建Python编译环境和导入库时遇到问题,容易望而却步,接下来我们看看Excel操作。
2.Excel VBA批量合并表格上面介绍了使用pandas批量合并数据,接下来,我将详细介绍如何使用Excel VBA 脚本实现在多表之间自动合并数据,并通过一些关键的 VBA 语法和逻辑,使你的 Excel 工作更高效、更智能。
2.1 数据演示
如下为一张销售订单数据Excel工作簿,内含"1日","2日","3日"共三个sheet表,现在需要将这三个sheet表合并为一个sheet表,并且,当有新增加的sheet表时,也可以继续合并,常规做法是一个一个sheet表复制、粘贴,倘若有上百个这样的sheet表,处理效率就很慢。
2.2 VBA准备工作
接下来,我将使用Excel VBA编写代码进行批量合并,要使用Excel VBA功能,需要在自定义功能区中勾选"开发工具"选项,默认在主页不显示"开发工具"选项,需要手动勾选。首先在Excel工作簿中点击“文件”选项。
然后在对应的菜单下点击“选项”按钮。
打开Excel选项,点击“自定义功能区”,然后勾选“开发工具”,点击“确定”按钮。
在主页功能区即可看到已经加载出“开发工具”选项。
2.3 编写VBA
在 Excel 中点击 "开发工具" 选项卡,点击 "Visual Basic" 按钮,打开 VBA 编辑器,VBA代码都是写在VBA 编辑器运行。
如下即为VBA 编辑器的操作界面。
在 VBA 编辑器窗口中,右键 "VBAProject(销售订单数据.xlsx)" ,依次点击 "插入" -> "模块",在插入的模块中编写 VBA 代码。
如下为编写的VBA代码,代码相对比较长,有一定的学习门槛和难度,如果看不明白的话,可以直接复制粘贴使用,另外,网上也有很多写技术贴的博主分享VBA代码,可以直接复制粘贴使用。
Sub 合并数据到新表() Dim ws As Worksheet Dim targetSheet As Worksheet Dim lastRow As Long Dim nextRow As Long Dim i As Integer ' 删除之前合并的数据表(如果存在) On Error Resume Next Application.DisplayAlerts = False Set targetSheet = ThisWorkbook.Sheets("合并结果") If Not targetSheet Is Nothing Then targetSheet.Delete End If Application.DisplayAlerts = True On Error GoTo 0 ' 新建一个Sheet用于存储合并后的数据 Set targetSheet = ThisWorkbook.Sheets.Add targetSheet.Name = "合并结果" ' 假设第一张表有表头,复制表头到目标Sheet For Each ws In ThisWorkbook.Sheets If ws.Name <> targetSheet.Name Then ws.Rows(1).Copy Destination:=targetSheet.Rows(1) Exit For End If Next ws ' 遍历所有工作表并合并数据 nextRow = 2 ' 设置从第2行开始合并数据(因为第1行为表头) For Each ws In ThisWorkbook.Sheets If ws.Name <> targetSheet.Name Then lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ws.Range("A2:A" & lastRow).EntireRow.Copy Destination:=targetSheet.Cells(nextRow, 1) nextRow = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Row + 1 End If Next ws MsgBox "数据合并完成!", vbInformationEnd Sub2.4 VBA运行
将VBA代码复制粘贴到到 VBA 编辑器中,点击 "运行" 按钮,或按下 F5 键运行该脚本。
返回 Excel 工作簿,由结果可以看到,所有的 sheet 表数据均合并至新的 "合并结果" 表中。
为了方便有新增的sheet表进行数据合并,可以添加一个表单控件,点击"开发工具",插入一个表单控件。
点击宏名称用于指定宏,然后点击确定按钮。
如下是设置后的表单控件,只要点击表单控件"开始合并",即可一键进行数据合并。
2.5 保存VBA
为了将编写的VBA可以永久保存,可以将工作簿保存为 *.xlsm 格式,点击"文件"选项,在保存类型中选择"Excel启用宏的工作簿",即可保存宏。
如果有新增的sheet表,比如这里新增"4日","5日"两个sheet表,仅需点击表单控件"开始合并",即可一键合并。
如下红色标记的地方,即为新增的sheet表批量合并后的结果。
以上,我们见识到了 VBA 在处理多表数据合并中的强大能力,无论是对于需要频繁处理数据报表的日常工作,还是面对复杂的数据管理任务,VBA都可以提高你的工作效率,对比pandas来说Excel操作更加简单,更适合对于代码和编译环境不那么了解的用户,这也是无法取代的原因。