如果你熟练使用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 pd
import 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 = 1
FileEnd = 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 "数据合并完成!", vbInformation
End Sub
2.4 VBA运行
将VBA代码复制粘贴到到 VBA 编辑器中,点击 "运行" 按钮,或按下 F5 键运行该脚本。
返回 Excel 工作簿,由结果可以看到,所有的 sheet 表数据均合并至新的 "合并结果" 表中。
为了方便有新增的sheet表进行数据合并,可以添加一个表单控件,点击"开发工具",插入一个表单控件。
点击宏名称用于指定宏,然后点击确定按钮。
如下是设置后的表单控件,只要点击表单控件"开始合并",即可一键进行数据合并。
2.5 保存VBA
为了将编写的VBA可以永久保存,可以将工作簿保存为 *.xlsm 格式,点击"文件"选项,在保存类型中选择"Excel启用宏的工作簿",即可保存宏。
如果有新增的sheet表,比如这里新增"4日","5日"两个sheet表,仅需点击表单控件"开始合并",即可一键合并。
如下红色标记的地方,即为新增的sheet表批量合并后的结果。
以上,我们见识到了 VBA 在处理多表数据合并中的强大能力,无论是对于需要频繁处理数据报表的日常工作,还是面对复杂的数据管理任务,VBA都可以提高你的工作效率,对比pandas来说Excel操作更加简单,更适合对于代码和编译环境不那么了解的用户,这也是无法取代的原因。