python_520_2022 发表于 2022-10-27 10:33:17

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或者其他库运行效率会更高

wp231957 发表于 2022-10-27 10:37:41

pandas 估计会更快一些
或者考虑vba

cflying 发表于 2022-10-27 10:46:49

xlwings要调用win32,所以速度肯定慢,我觉得用openpyxl应该快一些,但是如果pandas能实现的话估计还是pandas最快

jackz007 发表于 2022-10-27 12:14:35

本帖最后由 jackz007 于 2022-10-27 12:18 编辑

      无解,因为,效率低下是 Python 作为一门解释性语言与生俱来的缺陷和短板,选择 Python 就是选择了灵活、简单和方便,同时,牺牲掉的恰恰就是效率。

binzai_007 发表于 2022-10-27 13:59:59

建议文件用xlsx格式,然后用openpyxl,效率会高很多。
https://blog.csdn.net/woho778899/article/details/101989064
这个是别的做过的测试,明显openpyxl效率高很多。

阿奇_o 发表于 2022-10-27 14:03:53

我做了,用pandas大概10行代码, 6秒,搞定。   

有需要的话,可以联系我。↓

风中逐云客 发表于 2022-10-27 14:14:57

666

人造人 发表于 2022-10-27 14:19:37

如果效率是个问题的话,那就用汇编语言做吧
python要170秒才能算完,汇编语言只需要2秒

两手空空儿 发表于 2022-10-28 10:22:03

你这工作不复杂,用VBA的数组实现应该会很快吧

hrpzcf 发表于 2022-10-28 12:46:13

慢的不是python的计算过程,而是读取、写入xlsx的过程。
对于同一个文件,不要频繁地打开、关闭,打开关闭一次就够了。
读取数据时,一次读取,完成计算再一次写入,不要反复读取写入。
没有你的代码只能从这猜测了,很多人容易犯的错误。

cjh4312@163.com 发表于 2022-10-29 13:37:59

用你的数据试了一遍,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]
查看完整版本: Excel数据处理-效率问题