目录

合并当前文件夹下的所有Excel文件(Python版)

之前我分享过指定条件拆分Excel工作表的方法,一种是使用VBA,一种是使用Python。但在实际工作中,我们也会经常碰到需要合并当前文件夹下的所有Excel文件的情况,这里我也跟大家分享一下我的方法。

工作上的数据就不便泄露了,这里我用Python生成一些Excel文件来做例子(代码略)。

下图(左)是已经生成好的文件,一个Excel工作表为一个班级的学生成绩,下图(右)是每张表的格式。

/posts/merge-all-excel-files-under-the-current-folder-by-python/20181026-1.jpg

下面我们开始将这10张Excel表合并。

实现这一功能,我们需要引入两个Python库,一个是 pandas,一个是 os。

这里引入后,后面的代码中引入代码略过。

1
2
import pandas as pd
import os

方法一:使用 append

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
files_path = 'C:\\Users\\mo\\Desktop\\待合并\\'  # 文件位置
files = os.listdir(files_path)  # 读取所有文件名并生成列表
df = pd.read_excel(files_path + files[0])  # 读取第一个文件

# 循环读取后面文件的内容,并追加到第一个文件中
for file in files[1:]:
    temp = pd.read_excel(files_path + file)
    df = df.append(temp)

# 输出合并后的Excel表
df.to_excel(files_path + '合并.xlsx', index=False)

方法二:使用 concat

1
2
3
4
5
6
7
8
files_path = 'C:\\Users\\mo\\Desktop\\待合并\\'  # 文件位置
files = os.listdir(files_path)  # 读取所有文件名并生成列表

# 读取所有 Excel 表为 DataFrame,并生成列表
data = [pd.read_excel(files_path + file) for file in files]

# 使用 concat 连接 DataFrame,并输出合并后的 Excel 表
pd.concat(data).to_excel(files_path + '合并.xlsx', index=False)

得到合并后的Excel文件如下:

/posts/merge-all-excel-files-under-the-current-folder-by-python/20181026-2.jpg

如果你还需要把班级的名称也带上,给concat加上参数keys就可以啦

代码如下:

1
2
3
4
5
6
7
8
9
files_path = 'C:\\Users\\mo\\Desktop\\待合并\\' # 文件位置
files = os.listdir(files_path) # 读取所有文件名并生成列表
grades = [file.split('.')[0] for file in files] # 获取班级名称

# 读取所有 Excel 表为 DataFrame,并生成列表
data = [pd.read_excel(files_path + file, index_col=0) for file in files]

# 使用 concat 连接 DataFrame,并输出合并后的 Excel 表
pd.concat(data, keys=grades).to_excel(files_path + '合并.xlsx')

得到合并后的Excel文件如下:

/posts/merge-all-excel-files-under-the-current-folder-by-python/20181026-3.jpg

上面的代码都是将Excel表格纵向合并,其实横向合并也是可以的,在concat方法中在增加一个axis参数即可。

这里我们先将原表转置后,再来横向合并一下:

1
2
3
4
5
6
7
8
9
files_path = 'C:\\Users\\mo\\Desktop\\待合并\\'  # 文件位置
files = os.listdir(files_path)  # 读取所有文件名并生成列表
grades = [file.split('.')[0] for file in files]  # 获取班级名称

# 读取所有 Excel 表为 DataFrame,并生成列表
data = [pd.read_excel(files_path + file, index_col=0).T for file in files]

# 使用 concat 连接 DataFrame,并输出合并后的 Excel 表
pd.concat(data, keys=grades, axis=1).to_excel(files_path + '合并.xlsx')

得到合并后的Excel文件如下:

/posts/merge-all-excel-files-under-the-current-folder-by-python/20181026-4.jpg

这里横向合并好像没什么意义,不过在工作中的某些时候或许你用得上。