欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python处理excel文件

程序员文章站 2022-07-13 10:58:12
...

电子表格求和

问题描述

对如图中所示数据(截取了部分,真实数据达100万行),对每一个timeid=xxxx,统计其对应记录第四列之和
最后输出如 timeid=xxxx sum这样的形式
python处理excel文件
python处理excel文件


分析

  • 数据量非常大,不适合手动用excel自带的求和功能进行处理。
  • 不熟悉excel的自带求和函数的编写,遂用python进行处理
  • 数据格式比较简单,由于每一个timeid=xxxx对应的记录数目不一定相同,不能直接通过设置每一个timeid=xxxx对应记录行数来进行求和。

编码

版本:python3.6

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""
import xlrd

#保存结果
save_file_name="res.txt"
#待处理数据
origin_file_name="main.xlsx"
#保存结果
res=[]
#统计每一个timeid对应的和
tmp_sum=0.0
last_title="first"
#读入数据
wb = xlrd.open_workbook(origin_file_name)
#打开对应表
table = wb.sheet_by_index(0)
#行、列
nrows = table.nrows 
ncols = table.ncols

#遍历行
for index in range(0,nrows):   
    #line
    lines=table.row_values(index)
    #获取第一个字段
    first_field=lines[0]

    #碰到"timeid=xxxx"这样的行
    if(str(first_field).find("timeid")!=-1):      
        current_title=str(first_field)
        if(title!=last_title):
             #不记录第一个虚timeid
             if(last_title!="first"):
                 #添加到列表
                 tmp_res=[last_title,round(tmp_sum,2)]
                 res.append(tmp_res)
             #替换标签,清零 
             last_title=current_title
             tmp_sum=0.0          
    else:
        try:
            #统计和
            value=float(lines[3])
            tmp_sum+=value  
        except Exception as E:
            print("当前行: "+str(index))
            print(str(lines[3]))

    #保存最后一个        
    if(index==(nrows-1)): 
        tmp_res=[last_title,tmp_sum]
        res.append(tmp_res)     

#保存结果到文件
with open(save_file_name,"w") as f:
    for value in res:
        f.write(str(value[0])+"\t")
        f.write(str(value[1]))
        f.write("\n")

结果

python处理excel文件
测试结果与实际结果相符合


瞎扯

python处理excel文件

  • 如果数据存储格式为B,标签在对应记录下方,处理流程是:遇到标签行时,记录行和对应记录和。
  • 如果为A,如本例,就相对麻烦一点。当然,如果从后往前处理,则同B。如果从上往下处理,就要注意碰到每一个Tag时处理方式的统一性了。

PS:Anoconda对新手非常友好,自带了excel处理模块xlrd,能让我们专心于问题本身。

相关标签: python excel