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

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

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

python合并excel

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

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

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

import pandas as pd
import os

方法一:使用 append

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

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文件如下:

python合并excel

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

代码如下:

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文件如下:

python合并excel

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

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

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文件如下:

python合并excel

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

标签: Excel, Python, Pandas

已有 2 条评论

  1. xiaoying xiaoying

    非常的棒,看了很多,您写的这个最清楚最准确。而且逻辑很清晰,书写习惯极好。非常感谢。 :idea:

    1. 感谢你的访问,也很高兴能对你有所帮助 😁

添加新评论