Python与Excel表格综合实例四:对 Excel 表格内数据进行去重、分类,异常处理及分析

    • 前言:
    • 主要实现代码及思路:
      • 1、主要思路:
      • 2、读取数据函数:
      • 3、数据去重函数:
      • 4、数据分类函数:
      • 5、查找异常数据:
      • 6、数据分析函数:
      • 7、汇总异常数据及数据分析数据函数:
      • 8、创建标记样式函数:
      • 9、写入Excel表格函数:
    • 主代码:
    • 结尾:
  • 【Python与Office】专栏

前言:

介绍一个用 Python 实现对 Excel 表格中的数据进行去重、分类、标记异常数据等功能的实例。

虚拟文件简介:
有一份电商数据的 Excel 表格数据,该数据中有部分字段缺失和数据异常,表格部分数据如下:


数据下载地址:示例数据下载地址(注:因实例演示需要,数据有删改,操作Excel文件可私信或留言咨询。

具体需求:

1、数据去重: 读取所有数据,对数据中每个字段内容都一致的数据删除;
2、数据分类: 按分类二对数据进行分类,将每类数据写入不同的sheet表中;
3、异常处理: a:标记商品名称为空,市场价、店铺价、数量为NA的数据(红色字体); b: 标记店铺价大于市场价的数据(橙色字体);
4、数据分析: 找出每类商品中(按分类三)市场价与商品价差距最大的数据,并加粗斜体、蓝色字体显示;
5:用函数封装完成上述需求的代码。

最终完成效果图:

主要实现代码及思路:

1、主要思路:

实现上述需求的主体思路为:

第一步: 先获取到Excel的所有数据,因为每一行数据是一条独立数据,所以读取数据的方式为按行读取;
第二步: 去除重复数据,遍历读取到的数据,如果数据全部字段都相同则删除重复数据。

这里有一个问题,是先查找异常数据还是先对数据进行分类?
考虑到需要在新建的Excel表格里标记异常数据,所以先对数据按分类二字段分类,再对分类后的数据进行异常处理会好更简单一点。

第三步: 按分类二字段对数据分类,以字典数据结构存放分类数据。再对每类数据进行异常处理及数据分析,因需要是要标记异常值及分析后数据值,所以异常分析函数和数据分析函数只记录异常数据和数据分析结果数据的索引值。
第四步: 创建异常数据和分析结果数据标记的样式表,将数据写入Excel表格。先按分类二创建不同的sheet表写入数据,再对每一类数据的异常数据按创建的样式重写数据。

以下是实现上述分析的具体函数:

2、读取数据函数:

模块导入:

import xlrd
import xlwt

用 xlrd 模块按行读取文件数据:

# 读取数据方法
def read_data(path):# 打开Excel文件,获取sheet对象work_book = xlrd.open_workbook(path)sheet = work_book.sheet_by_index(0)# 按行获取所有数据all_data = sheet._cell_valuesreturn all_data
3、数据去重函数:

数据去重函数:主要模拟pandas模块dataframe 里对数据去重的方法。

主要思路为:

1、先创建一个将放入bool值的 tag 列表;
2、创建一个中间列表存放临时查重值;
3、遍历需查重对象,没有重复的放入临时列表,tag 列表增加 True 值;
4、重复对象不放入临时列表,tag 列表增加 False 值;
5、根据 tag 列表提取查重对象无重复对象和重复对象。

代码:

# 数据去重
def del_duplication(data):tags = [] #m = []for ds in data:if ds not in m:m.append(ds)tags.append(True)else:tags.append(False)clean_data = [ds for i,ds in enumerate(data)if tags[i]]del_data = [ds for i,ds in enumerate(data)if not tags[i]]del mreturn clean_data,del_data

测试:

c_data,d_data = del_duplication(data) # data 为读取的所有数据
# 删除的重复数据
print(d_data)

打印截图:

4、数据分类函数:

依据 Excel 文件中 分类2 字段对数据进行分类:

# 数据分类
def classify_data(data):class_data = {}for ds in data:if ds[2] not in class_data.keys():class_data[ds[2]] = [ds]else:class_data[ds[2]].append(ds)return class_data

测试:

d2 = classify_data(c_data[1:])
print(d2.keys())
# 打印结果
# dict_keys(['男装', '男鞋'])

按分类2进行分类时,数据被分为 2 类:男装、男鞋。

5、查找异常数据:

异常数据有两种,情形一:是数据为空或为NA值,情形二:店铺价大于市场价。

筛选情形一异常值函数:

# 查找异常数据,缺失数据、NA数据
def strange_data(data):strange_index = []for i,ds in enumerate(data):# 数据为空时if ds[0] == '':strange_index.append(i)# 数据为NA 值时elif ds[5] == 'NA':strange_index.append(i)elif ds[6] == 'NA':strange_index.append(i)elif ds[7] == 'NA':strange_index.append(i)return strange_index

注:返回的是异常数据在所有数据中的索引值。

筛选情形二异常值函数:

# 店铺价大于商场价的数据
def strange_data_2(data):strange_index = []for i,ds in enumerate(data):try:if float(ds[6]) > float(ds[5]):strange_index.append(i)except:passreturn strange_index

注:因数据的商场价或店铺价可能为NA值,所以这里用 try 捕捉下异常情况。

6、数据分析函数:

按分类三,查找每类商品中市场价与商品价差距最大的数据:

# 数据分析
def analysis_data(data):# 按分类 3 分类对数据进行分类class_3_data = list(set([ds[3] for ds in data]))max_index = []for tag in class_3_data:middle_ = {}for i,ds in enumerate(data):if ds[3] == tag:try:middle_[i] = float(ds[5])-float(ds[6])except:middle_[i] = 0max_value = max(middle_.values())max_index += [key for key in middle_ if middle_[key] == max_value]return max_index

注:数据分析和异常处理共三个函数,可以好好理一下里面的思路。

7、汇总异常数据及数据分析数据函数:
# 汇集异常数据、及数据分析后数据信息
def data_index(data):data_dict = {}for key in data.keys():# 缺失数据索引index_1 = strange_data(data[key])# 店铺价大于商场价的数据索引index_2 = strange_data_2(data[key])# 数据分析结果索引index_3 = analysis_data(data[key])data_dict[key] = [index_1,index_2,index_3]return data_dict
8、创建标记样式函数:
# 建立样式
def styles():# 红色字体style1 = xlwt.XFStyle()font1 = style1.fontfont1.colour_index = 0x0A# 橙色字体style2 = xlwt.XFStyle()font2 = style2.fontfont2.colour_index = 0x35# 加粗斜体蓝色字体style3 = xlwt.XFStyle()font3 = style3.fontfont3.italic = Truefont3.bold = Truefont3.colour_index = 0x0Creturn style1,style2,style3

不清楚如何用 xlwt 模块设置单元格样式可参考:单元格格式、字体格式、对齐方式、边框等设置方法

9、写入Excel表格函数:
# 将数据写入Excel表格
def create_excel(data,labels,data_index,file_name):# 建立字体格式s1,s2,s3 = styles()styles_ = [s1,s2,s3]# 建立工作薄work_book = xlwt.Workbook()for key in data.keys():# 建立sheet表,打开单元格重写sheet = work_book.add_sheet(key,cell_overwrite_ok = True)# 在sheet表中写入行标签for col_,label in enumerate(labels):sheet.write(0,col_,label)# 先按默认格式写入所有数据for row,ds in enumerate(data[key]):for col,d in enumerate(ds):sheet.write(row+1,col,d)# 再按标记索引重写被标记的数据for i,ixs in enumerate(data_index[key]):for ix in ixs:for col,d in enumerate(data[key][ix]):sheet.write(ix+1,col,d,styles_[i])work_book.save(file_name)

注:这里在创建sheet表时 add_sheet(key,cell_overwrite_ok = True) 重写设置需打开。

主代码:

if __name__ == '__main__':data = read_data('test01.xls')c_data,d_data = del_duplication(data)heads = c_data[0]d2 = classify_data(c_data[1:])ixs = data_index(d2)new_excel = create_excel(d2,heads,ixs,'new.xls')

创建的 new.xls 文件截图:
异常数据标记效果图:


按分类三分类计算的商场价与店铺价差价最大的标记效果图:

结尾:

以上就是本篇博客的全部内容了,如有不清楚的地方可查看往期博客,感谢阅读。

【Python与Office】专栏

该专栏会对 Python 的第三方模块,如:xlwt,xlrd,python-docx等,操作 Office 办公软件(Word Excel PPT)的方法进行详细讲解。同时也会搭配一些实例演练,一方面强化知识点的理解与运用,另一方面也希望能起到,引导读者进行思考:如何用 python 提高 offic 办公软件办公效率的作用。

感兴趣的朋友,可以点个 关注收藏 。如在博客中遇到任何问题或想法,可留言或私信。

创作不易,你的支持是我最大的动力,感谢 !

用 Python 对 Excel 表格内数据进行去重、分类,标记异常及分析相关推荐

  1. python 显示表格数据_python显示excel表格数据-怎么用python读取excel表格的数据

    怎么用python读取excel表格的数据 #导入包 import xlrd #设置路径 path='C:\\Users\\jyjh\\Desktop\\datap.xlsx' #打开 data=xl ...

  2. 为何excel中数据无法计算机,excel表格内数据为何无法计算机-为什么EXCEL单元格内的数字不能运算...

    我的电脑为什么不能把一个excel表中数据导入另一个... 在Excel中打不上去可能是由于数出了位数限制,对应及解决方下: 1.系统默认单元格中输入数字格式为"常规",能完全显示 ...

  3. 基于Python读取Excel表格文件数据并转换为字典dict格式

      有时我们需要将一个Excel表格文件中的全部或一部分数据导入到Python并转换为字典格式,如何实现呢?   我们以如下所示的一个表格(.xlsx格式)作为简单的示例.其中,表格共有两列,第一列为 ...

  4. excel表格内数据为何无法计算机,电脑EXCEL表格怎么让隐藏列(行)中的数据不被复制...

    电脑EXCEL表格怎么让隐藏列(行)中的数据不被复制 我们即便在excel中隐藏了列(行),依旧可以显示出来并被复制.今天小编就告诉大家电脑EXCEL表格怎么让隐藏列(行)中的数据不被复制. 具体如下 ...

  5. Python读取excel表格人员数据同时批量写入多个excel个人登记表

    背景:驻村期间需要将1张含有200多人的人员记录数据写入人员信息登记表中,1条记录对应一个人员信息登记表.如果复制粘贴肯定比较慢,所以当然使用Python来解决.涉及的字段其实有23个,因涉及其他问题 ...

  6. python 读取excel 表格的数据

    自己随便写了一个表格如下 使用工具xlrd 如果没有下载 可以使用pip install xlrd 下载一个 大致需要一下几个步骤 1 打开excel table = xlrd.open_workbo ...

  7. excel表格内数据为何无法计算机,excel表格怎么设置数字下拉数值不变不递增

    我们在表格中需要填写序号,但是一个一个的写太累了,下面我们就来介绍Excel下拉数字递增怎么设置. 工具/材料 电脑. 填充区域 01先选中表格需要填充的区域. 02在上方输入你想接下来都不变化的那个 ...

  8. python excel 数据匹配_python将一个excel表格的数据匹配到另一个表中

    python将一个excel表格的数据匹配到另一个表中 python将一个excel表格的数据匹配到另一个表中 打开excel表,需要在另一个表中匹配相应学生姓名的学号信息. 之前尝试了excel中的 ...

  9. python读取excel表格-python读取excel表格中的数据

    使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...

最新文章

  1. 轻量级 memcached缓存代理 twemproxy实践
  2. 1.Spring Cloud Alibaba教程:简介
  3. Tomcat的SessionID引起的Session Fixation和Session Hijacking问题
  4. AI理论知识基础(20)-线性变换(2),转换矩阵,相似矩阵,坐标向量
  5. 容器映像_容器映像中的内容:应对法律挑战
  6. ifconfig没有ip地址_虚拟机创建后该如何获取IP地址并访问互联网实用教程
  7. 合天网安就业班_CTF挑战赛-合天网安实验室
  8. 天涯明月刀登录的界面服务器显示,上述便是Win10系统下登录天涯明月刀提示异地登录不了的详细解决方法了...
  9. Soui Button学习一
  10. 矩阵转置matlab的函数,【ZZ】Matlab矩阵操作
  11. ps入门第10天_ps色彩平衡ps色相饱和度
  12. edi系统三要素_EDI的三要素
  13. CSS 基础教程:CSS 选择器
  14. Keras:使用预训练模型迁移学习单通道灰度图像
  15. 做产品,懂人性,触人心
  16. 南开hpd openbilibili
  17. 四十五、Kafka生产者(Producer)API介绍
  18. 小米电视看普通电视台,只需几步就能轻松解锁
  19. 数字计算机之父——冯·诺依曼
  20. php m3u8转mp4

热门文章

  1. 前端技术猜想-2018
  2. Faster RCNN layer.py
  3. 网站实现新浪微博登录
  4. Cesium 填挖方分析
  5. 【每日一题】蜗牛爬井问题
  6. MATLAB计算信号短时平均过零率
  7. CentOS7/Debian 配置SOCKS5代理服务记录
  8. Android 自定义View之咖啡杯动画
  9. Jest encountered an unexpected token This usually means that you are trying to import a file which J
  10. UEFI开发与调试--edk2中的基础组件