研究背景:
由于工作中每天需要计算遗留工单,但工单创建的时间不确定,需要导出近半年的数据进行筛选,而系统一次只能到处一个月的数据,格式为excel格式文件,文件大学为10MB左右,每个文件数据量2万行~5万行x89列,因此需要将每个文件的数据合并到一个文件进行筛选,此前因为合并一种劳务费申诉表(数据不超过2000行x19列)写过一个python+xlwings合并文件夹下的excel文件的脚本代码(可以查我之前的文章:
python3和xlwings实现的合并同一目录下的所有excel(工作薄)文件中的所有Sheet(工作表)到一个excel(工作簿)中的第一个Sheet(工作表)中:
),但范围选择不好设置,所以有了用pandas合并的想法,并查资料,改代码,经过一番修改,最新状态如下:
import numpy as np
import pandas as pd
import xlrd
import os
import xlwings as xw
# root_path:存放需合并文件的文件夹路径
# root_path = r"H:2"
root_path = r"E:DZXdownload2"
# frames:存放读取的每个文件对应的dataframe对象的列表
frames = list()
# 获取文件夹中的文件名列表
cont = os.listdir(root_path)
print(cont)
# 循环读取文件为dataframe对象,并添加到frames列表
for i in range(0,len(cont)):
root = root_path
# 拼接文件路径
filename = os.path.join(root,cont[i])
print(filename)
# 读取文件为dataframe,header:设置标题行为哪一行,第一行是0
df = pd.read_excel(filename,header = 1) # 读取 ,index_col = 0
# 将读取的dataframe追加到frames列表保存
frames.append(df)
# 将列表中的dataframe 合并成一个dataframe
df = pd.concat(frames)
print(df)
# 将合并后的dataframe保存到一个新文件
df.to_excel(r"E:DZXdownload2合并.xlsx",index = False)
以下是运行结果:
耗时近15分钟,xlwings那个也是差不多需要10多分钟,时间大都浪费在打开文件和保存文件上了,可能是数据有些多的缘故吧(不过才十几万行数据),真不敢想那些上百万,千万的数据是如何处理的,难道是数据存储格式的影响?



