前言:

介绍一个用 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_values

return

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

m

return

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

:

pass

return

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

]

=

0

max_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

.

font

font1

.

colour_index

=

0x0A

# 橙色字体

style2

=

xlwt

.

XFStyle

(

)

font2

=

style2

.

font

font2

.

colour_index

=

0x35

# 加粗斜体蓝色字体

style3

=

xlwt

.

XFStyle

(

)

font3

=

style3

.

font

font3

.

italic

=

True

font3

.

bold

=

True

font3

.

colour_index

=

0x0C

return

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

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

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

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

  1. 用 Python 对 Excel 表格内数据进行去重、分类,标记异常及分析

    Python与Excel表格综合实例四:对 Excel 表格内数据进行去重.分类,异常处理及分析 前言: 主要实现代码及思路: 1.主要思路: 2.读取数据函数: 3.数据去重函数: 4.数据分类函数 ...

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

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

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

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

  4. python提取视频字幕_荐利用Python提取视频中的字幕(文字识别)

    学了好久机器学习的内容有些许枯燥,今天我们来做一个Python的小项目来玩耍吧! 项目背景 通过获取百度API实现视频文字识别. 需求阐述 将.MP4格式视频裁剪成一帧一帧的图片再将图片中的字幕摘取出 ...

  5. python广告营销平台_荐用Python写一个营销号垃圾视频生成器

    用Python写一个营销号垃圾视频生成器 可能是闲着太无聊,然而复习是不可能复习的,就做了一个这个玩意儿,改天进军UC和百家号(不会真有人用吧) 先看看效果:(1:20以后) 用Python做的营销号 ...

  6. python画饼图柱状图_荐【python数据分析(24)】Matplotlib库基本图形绘制(1)(线形图、柱状图、堆叠图、面积图、填图、饼图)...

    0. 前期准备: 导入三个必备的库,推荐使用jupyter notebook或者spyder编程环境 import numpy as np import pandas as pd import mat ...

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

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

  8. 到处excel表格的数据和页面的数据不一致

    列表:Select t,m.frameworkName,ma.accountName from SaleEntity t left join MediaAccountEntity ma on t.me ...

  9. 计算机Excel设置透视图,电脑Excel表格中数据透视图怎么制作

    电脑Excel表格中数据透视图怎么制作 腾讯视频/爱奇艺/优酷/外卖 充值4折起 我们在使用excel表格办公的时候,有时候会需要使用到数据透视表.今天小编就告诉大家电脑Excel表格中数据透视图怎么 ...

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

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

最新文章

  1. java8新特性_Java8新特性之Date API|乐字节
  2. 郁闷的Alexa破10万。
  3. VS2012+EF6+Mysq
  4. tomcat 远程管理(入门级)
  5. 连续2年入不敷出,青云流血冲刺科创板:拟募资11.88亿,最近三年净亏4.37亿
  6. C语言--const修饰指针解析
  7. mybatis-plus自定义mapper报org.apache.ibatis.binding.BindingException: Invalid bound statement(not found)
  8. Android UncaughtExceptionHandler 全局异常监控
  9. GDCM:Patch File的测试程序
  10. Hadoop框架:DataNode工作机制详解
  11. MLSQL解决了什么问题
  12. php中mysql的增删_PHP MySql增删改查的简单实例
  13. python培训班骗局-深圳盐田区python专业培训机构,真实经历分享
  14. 语音信号处理基础(一)
  15. [ 原创 ]2017年3月25日
  16. shell编程(精华总结版)
  17. 管理新语:如果经验有用,大家都去养老院招人了
  18. 【剑指offer】31、栈的压入和弹出序列
  19. 翻译《Git版本控制管理》
  20. html双人对战源码,双人对战五子棋游戏 综合运用HTML、CSS、JavaScript实现

热门文章

  1. 毕设题目:Matlab DTMF双音多频
  2. 【TSP】基于matlab改进的人工鱼群算法求解旅行商问题【含Matlab源码 1479期】
  3. 【数字基带信号】基于matlab数字基带信号波形仿真【含Matlab源码 988期】
  4. 【手指识别】基于matlab GUI指尖图像采集与检测【含Matlab源码 585期】
  5. 【跌倒检测】基于matlab中值滤波+二值化跌倒检测【含Matlab源码 344期】
  6. java实现分时问候,asp实现语音分时问候_asp实例
  7. python创建对象_python对象
  8. server2019安装mysql_windows server2019下安装mysql8.0.11
  9. 64位系统装32和64位oracle,64位系统安装32位Oracle developer
  10. 如何用stata画莫兰散点图_图说meta十四:漏斗图暨Stata软件使用方法简介