一、背景
在日常工作中经常回用到数据分析与统计工作,而在实施数据分析之前,最为最要的就是数据的搜集、整理工作。这里介绍一下多个相同格式的excel合并的处理。如果在excel文件表比较少时,手工合并还可以应付,当几十个几百个甚至更多的表时,手工合并效率会非常低,于是让计算机自动合并处理,帮助我们完成工作就显得非常有必要。
二、同一文件夹下合并excel文件
比如,在“2019年集团大学生招聘”下有两个表格,想要实现的是将这两个表格数据合并。
各个表中的数据格式如下图:
import pandas as pd
import os
#文件路径
file_dir = r'C:\Users\Administrator\Desktop\2019年集团大学生招聘'
#构建新的表格名称
new_filename = file_dir + '\\new_file.xls'
#找到文件路径下的所有表格名称,返回列表
file_list = os.listdir(file_dir)
new_list = []
for file in file_list:
#重构文件路径
file_path = os.path.join(file_dir,file)
#将excel转换成DataFrame
dataframe = pd.read_excel(file_path)
#保存到新列表中
new_list.append(dataframe)
#多个DataFrame合并为一个
df = pd.concat(new_list)
#写入到一个新excel表中
df.to_excel(new_filename,index=False)
结果:
三、不同文件夹下合并excel表
有时候表格存放在文件夹下,现在需要将不同文件夹下的表格合并,此时需要对程序进行简单的修改。
文件目录结构如下:
2019年集团大学生招聘
------公司A
- ------A公司2019年度接收毕业生公示信息表
------公司B
- ------B公司2019年度接收毕业生公示信息表
在此之前需要先了解一下os模块中的walk方法:
import os
file_dir = r'C:\Users\Administrator\Desktop\2019年集团大学生招聘'
file_list = os.walk(file_dir)
for x,y,z in file_list: #x是文件路径,y是目录下的文件夹,z目录下的文件
print('x是{}'.format(x))
print('y是{}'.format(y))
print('z是{}'.format(z))
print('*'*50)
结果:
x是./2019年集团大学生招聘
y是['公司A', '公司B']
z是[]
**************************************************
x是./2019年集团大学生招聘\公司A
y是[]
z是['A公司2019年度接收毕业生公示信息表.xlsx']
**************************************************
x是./2019年集团大学生招聘\公司B
y是[]
z是['B公司2019年度接收高校毕业生信息表\xa0.xls']
**************************************************
注意:os.walk()方法,它可以查询到目录下不同文件夹中的文件。其中,x代表的是文件路径,y代表的是目录下的文件夹,z代表的是目录下的文件。
import pandas as pd
import os
#文件路径
file_dir = r'C:\Users\Administrator\Desktop\2019年集团大学生招聘'
#构建新的表格名称
new_filename = file_dir + '\\new_file.xls'
#找到文件路径下的所有表格名称
file_list = os.walk(file_dir)
new_list = []
for dir_path,dirs,files in file_list:
for file in files:
#重构文件路径
file_path = os.path.join(dir_path,file)
#将excel转换成DataFrame
df = pd.read_excel(file_path)
new_list.append(df)
#多个DataFrame合并为一个
df = pd.concat(new_list)
#写入到一个新excel表中
df.to_excel(new_filename,index=False)
结果:
最后,需要注意,以上只是一个简单的程序,对于数据量不是很大的场景,可以放心使用。但当数据量非常大时,程序还需要进一步优化,因为程序是将所有的数据保存在一个列表中,最后再一次性写入excel表中,这里需要考虑excel版本是否支持大数据量的写入,另外,也要考虑程序资源消耗的问题,内存可能不足。