合并当前文件夹下的所有Excel文件(Python版)
之前我分享过指定条件拆分Excel工作表的方法,一种是使用VBA,一种是使用Python。但在实际工作中,我们也会经常碰到需要合并当前文件夹下的所有Excel文件的情况,这里我也跟大家分享一下我的方法。
工作上的数据就不便泄露了,这里我用Python生成一些Excel文件来做例子(代码略)。
下图(左)是已经生成好的文件,一个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文件如下:
如果你还需要把班级的名称也带上,给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文件如下:
上面的代码都是将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文件如下:
这里横向合并好像没什么意义,不过在工作中的某些时候或许你用得上。
- 本文链接:http://notesth.com/merge-all-excel-files-under-the-current-folder-by-python.html
- 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
非常的棒,看了很多,您写的这个最清楚最准确。而且逻辑很清晰,书写习惯极好。非常感谢。 :idea:
感谢你的访问,也很高兴能对你有所帮助 😁