鱼C论坛

 找回密码
 立即注册
查看: 3113|回复: 10

[已解决]Excel数据处理-效率问题

[复制链接]
发表于 2022-10-27 10:33:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大神,最近在用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或者其他库运行效率会更高
最佳答案
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[0:5]
df['A']=data['A'].iloc[5:]/1000
df['B']=data['C']
df['C']=data['G']
df['D'][5]=data['D'][5]
df['E'][5]=data['E'][5]
df['F'][5]=data['F'][5]
df['G'][5]=data['H'][5]
for i in range(6,len(data)):
    df['D'][i]=df['D'][i-1]+data['D'][i]
    df['E'][i]=df['E'][i-1]+data['E'][i]
    df['F'][i]=df['F'][i-1]+data['F'][i]
    df['G'][i]=df['G'][i-1]+data['H'][i]
dd=pd.concat([df1,df])
dd.to_excel('e:\cjh\Documents\python\OriginalData1.xlsx',index=False)

源数据说明

源数据说明

OriginalData.zip

1.37 MB, 下载次数: 4

Excel数据

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-27 10:37:41 | 显示全部楼层

回帖奖励 +20 鱼币

pandas 估计会更快一些
或者考虑vba
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-27 10:46:49 | 显示全部楼层

回帖奖励 +20 鱼币

xlwings要调用win32,所以速度肯定慢,我觉得用openpyxl应该快一些,但是如果pandas能实现的话估计还是pandas最快
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-27 12:14:35 | 显示全部楼层

回帖奖励 +20 鱼币

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

      无解,因为,效率低下是 Python 作为一门解释性语言与生俱来的缺陷和短板,选择 Python 就是选择了灵活、简单和方便,同时,牺牲掉的恰恰就是效率。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-27 13:59:59 | 显示全部楼层
建议文件用xlsx格式,然后用openpyxl,效率会高很多。
https://blog.csdn.net/woho778899/article/details/101989064
这个是别的做过的测试,明显openpyxl效率高很多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-27 14:03:53 | 显示全部楼层
我做了,用pandas大概10行代码, 6秒,搞定。   

有需要的话,可以联系我。↓
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-27 14:14:57 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-27 14:19:37 | 显示全部楼层
如果效率是个问题的话,那就用汇编语言做吧
python要170秒才能算完,汇编语言只需要2秒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-28 10:22:03 | 显示全部楼层
你这工作不复杂,用VBA的数组实现应该会很快吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-28 12:46:13 | 显示全部楼层
慢的不是python的计算过程,而是读取、写入xlsx的过程。
对于同一个文件,不要频繁地打开、关闭,打开关闭一次就够了。
读取数据时,一次读取,完成计算再一次写入,不要反复读取写入。
没有你的代码只能从这猜测了,很多人容易犯的错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.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[0:5]
df['A']=data['A'].iloc[5:]/1000
df['B']=data['C']
df['C']=data['G']
df['D'][5]=data['D'][5]
df['E'][5]=data['E'][5]
df['F'][5]=data['F'][5]
df['G'][5]=data['H'][5]
for i in range(6,len(data)):
    df['D'][i]=df['D'][i-1]+data['D'][i]
    df['E'][i]=df['E'][i-1]+data['E'][i]
    df['F'][i]=df['F'][i-1]+data['F'][i]
    df['G'][i]=df['G'][i-1]+data['H'][i]
dd=pd.concat([df1,df])
dd.to_excel('e:\cjh\Documents\python\OriginalData1.xlsx',index=False)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 21:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表