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('写入数据的文件绝对地址') # 记得保存
这里处理了四个问题:
- 批量处理文件
- float精度误差,也就是小数点多出了好几位的问题
- 对已存在的excel文件写入数据
- 以行为数据单元,而不是单元格
小白学习python第一天,打卡