2021-01-13

python批量处理excel表格

python处理excel表格,统计去掉重复项的个数以及重复项出现次数(以行为单位)

这两天,帮师兄处理一个实验数据表格,要求是要找到excel不一样的行单元数据,以及统计一样的行单元的出现次数,如

如上图一个有2个非重复行单元数据,分别出现1次和4次

当初为了省事,打算从网上找一个代码来处理,但是查遍全网也没有找到,无奈只能从头开始学习python来处理了,下面是我写的代码,如果您有更好的想法或者发现错误,也请告诉我,谢谢

import xlrd
import xlwt
from xlutils.copy import copy   # 为了在已存在的excel表格里写入数据,若新建excel则不需要
import numpy as np              # 将列表转换成数组,方便修改数据
import os

old = xlrd.open_workbook("写入数据的文件绝对地址")
w = copy(old)                      # 创建old文件的副本,对于在已有的excel文件上写入数据,
                                   # 必须创建一个这样的副本,任何操作都是对这个副本操作的

row = 0                           #写入数据时换行用的 
row_1 = 0                         # 同上,因为要写入两组不同的数据

files = os.listdir("批量处理exlel文件的文件夹的绝对地址")

for item in files:
    self = xlrd.open_workbook('批量处理exlel文件的文件夹的绝对地址/' + item)  
    # 注意这个与上面的绝对地址不同的是,最后有一个’/‘这个
    data = self.sheet_by_name('sheet名')  #也可以按索引查找 ,自行百度
    rows_num = data.nrows       # 该sheet里的行数,下面是列数
    col_num = data.col

    List = []                       # 创建两个列表来当作数据的容器
    List_2 = []
   
    for i in range(0, rows_num):
       row_line = data.row_values(i)          # 以一行为单位读取
       mid_np = np.array(row_line)            # 因为我的excel里有float数,python在处理这种类 
                                               #  型的数据时,会发生浮点误差(无限逼近,却不是)
                                               # 列表不能处理修改数据精度,因此将列表转换成数 
                                               # 组,利用round保证数据精度,最后再转换成列表
       mid_np_3f = np.round(mid_np, 3)
       row_line_new = list(mid_np_3f)
       List.append(row_line_new)
    
    for i in List:                            #遍历List里的数据,若这个数据不在List_2,则加进 
                                              #去,保证List_2里的数据都是唯一的
      if i not in List_2:
        List_2.append(i)

    for i in List_2:
       w.get_sheet(4).write(row_1, 13, List.count(i))    # List.count(i)统计重复项出现次数,写 
                                                        #入excel里
       row_1 += 1                                        # 记得换行,否则新数据会覆盖之前的数 
                                                         #据
    w.get_sheet(4).write(row, 12, len(List_2))          # 统计非重复项的个数
    w.get_sheet(4).write(row, 11, item)                 # 写入文件名
    row += 1                                            # 换行

w.save('写入数据的文件绝对地址')                        # 记得保存









    










这里处理了四个问题:

  1. 批量处理文件
  2. float精度误差,也就是小数点多出了好几位的问题
  3. 对已存在的excel文件写入数据
  4. 以行为数据单元,而不是单元格

小白学习python第一天,打卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值