Excel数据处理-效率问题
各位大神,最近在用xlwings处理Excel几万行数据时,用for循环读取,计算,复制数据的运算时间比较长,处理一个Excel需要花费几分钟。求助各位大神,帮忙看看有没有运算更快速的方法
1.源Excel数据读入Python,然后新建一个工作表
2.新建工作表的前面5行都留为空白,新工作表中只放数据值,其他信息都不需要
2.把源数据中的A列所有数据除以1000后都放在新建的工作表第1列,和源数据一样,数据值在新工作表中从第六行开始放
3.源数据中的C列,直接copy放在新工作表的第2列,第六行开始放
4.源数据中的G列,直接copy放在新工作表的第3列,第六行开始放
5.源数据中的D,E F列,每列的数据做处理后,放入新工作表的 4 ,5 ,6列,第六行开始放;
处理方法: 源数据第六行单元格数据直接放入新工作表;
新工作表第7行单元格数据 等于 新工作表第6行单元格数据值 + 源数据第7行单元格数据值
新工作表第8行单元格数据 等于 新工作表第7行单元格数据值 + 源数据第8行单元格数据值
依此类推,直到全部完成(之前用xlwings for循环处理,运算速度很慢)
6.源数据的H列,每列的数据做处理后,放入新工作表的 7列,第六行开始放;(H列的第四行名称DN 和 G列4行的名称相同,都是DN)
处理方法,同上: 源数据第六行单元格数据直接放入新工作表;
新工作表第7行单元格数据 等于 新工作表第6行单元格数据值 + 源数据第7行单元格数据值
新工作表第8行单元格数据 等于 新工作表第7行单元格数据值 + 源数据第8行单元格数据值
依此类推,直到全部完成(之前用xlwings for循环处理,运算速度很慢)
以上6个过程,之前用xlwings操作都实现过,但是运行时间等太久。麻烦各位帮忙看看,是不是用pandas或者其他库运行效率会更高
pandas 估计会更快一些
或者考虑vba xlwings要调用win32,所以速度肯定慢,我觉得用openpyxl应该快一些,但是如果pandas能实现的话估计还是pandas最快 本帖最后由 jackz007 于 2022-10-27 12:18 编辑
无解,因为,效率低下是 Python 作为一门解释性语言与生俱来的缺陷和短板,选择 Python 就是选择了灵活、简单和方便,同时,牺牲掉的恰恰就是效率。 建议文件用xlsx格式,然后用openpyxl,效率会高很多。
https://blog.csdn.net/woho778899/article/details/101989064
这个是别的做过的测试,明显openpyxl效率高很多。 我做了,用pandas大概10行代码, 6秒,搞定。
有需要的话,可以联系我。↓ 666 如果效率是个问题的话,那就用汇编语言做吧
python要170秒才能算完,汇编语言只需要2秒
你这工作不复杂,用VBA的数组实现应该会很快吧 慢的不是python的计算过程,而是读取、写入xlsx的过程。
对于同一个文件,不要频繁地打开、关闭,打开关闭一次就够了。
读取数据时,一次读取,完成计算再一次写入,不要反复读取写入。
没有你的代码只能从这猜测了,很多人容易犯的错误。 用你的数据试了一遍,pandas 全部完成只需要26秒左右。
data=pd.read_excel('e:\cjh\Documents\python\OriginalData.xlsx',header=None)
data.rename(columns={0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',6:'G',7:'H'},inplace=True)
df=pd.DataFrame(columns=data.columns)
df1=data
df['A']=data['A'].iloc/1000
df['B']=data['C']
df['C']=data['G']
df['D']=data['D']
df['E']=data['E']
df['F']=data['F']
df['G']=data['H']
for i in range(6,len(data)):
df['D']=df['D']+data['D']
df['E']=df['E']+data['E']
df['F']=df['F']+data['F']
df['G']=df['G']+data['H']
dd=pd.concat()
dd.to_excel('e:\cjh\Documents\python\OriginalData1.xlsx',index=False)
页:
[1]