一、背景
在日常工作中經常回用到數據分析與統計工作,而在實施數據分析之前,最為最要的就是數據的搜集、整理工作。這里介紹一下多個相同格式的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版本是否支持大數據量的寫入,另外,也要考慮程序資源消耗的問題,內存可能不足。