python数据去重max()_⽤Python对Excel表格内数据进⾏去
重、分类,标记异。。。
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_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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论