python 数据去重 max()_荐 用 Python 对 Excel 表格内数据进行去重、分类,标记异常及分析...
发布日期:2022-02-04 01:43:59 浏览次数:30 分类:技术文章

本文共 5435 字,大约阅读时间需要 18 分钟。

前言:

介绍一个用 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 办公软件办公效率的作用。

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

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

转载地址:https://blog.csdn.net/weixin_39603908/article/details/110776778 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:you need python_Life is short, you need Python!
下一篇:jsp input输入实时校验长度并提示_拆解「输入框」,理解输入反馈的规则逻辑

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年03月29日 01时03分28秒