数据挖掘技术-检测与处理记录重复值

检测与处理记录重复值

  1. 准备数据

准备数据detail.csv,将数据文件detail.csv放到Linux本地的/course/DataAnalyze/data目录。

  1. 检测处理记录重复
  1. 菜品订单详情表中的dishes_name特征,存放了每个订单的菜品。为找出所有已点菜品,最简单的方法就是利用去重操作实现。方法一是利用列表(list)去重,如代码 41所示。

代码 41 利用list去重

In[1]:

import os

import pandas as pd

os.chdir('/course/DataAnalyze/data')

detail = pd.read_csv('./detail.csv',index_col=0,encoding = 'gbk', engine = 'python')

##方法一

##定义去重函数

def delRep(list1):

    list2=[]

    for i in list1:

        if i not in list2:

            list2.append(i)

    return list2

dishes=list(detail['dishes_name']) ##将dishes_name从数据框中提取出来

print('去重前菜品总数为:',len(dishes))

dish = delRep(dishes) ##使用自定义的去重函数去重

print('方法一去重后菜品总数为:',len(dish))

Out[1]:

去重前菜品总数为: 1546

方法一去重后菜品总数为:145

  1. 除了使用代码 41中的方法一去重之外,还可以利用集合(set)的元素是唯一的特性去重,此方法为方法二,如代码 42所示。

代码 42 利用set的特性去重

In[2]:

##方法二

print('去重前菜品总数为:',len(dishes))

dish_set = set(dishes) ##利用set的特性去重

print('方法二去重后菜品总数为:',len(dish_set))

Out[2]:

去重前菜品总数为: 1546

方法二去重后菜品总数为:145

  1. 比较上述两种方法可以发现,未使用集合元素唯一性这一特性去重的方法明显代码 冗长,会拖慢数据分析的整体进度。使用集合元素唯一性去重的方法,看似代码 简单了许多,但是这种方法的最大问题是会导致数据的排列发生改变,如表 41所示。

表 41 不同方法去重前后的部分数据排列比较

源数据

方法一去重数据

方法二去重后数据

蒜蓉生蚝

蒜蓉生蚝

纸杯蛋糕

蒙古烤羊腿

蒙古烤羊腿

爆炒鳝碌

大蒜苋菜

大蒜苋菜

黄尾袋鼠西拉子红葡萄酒

芝麻烤紫菜

芝麻烤紫菜

白斩鸡

蒜香包

蒜香包

香菇鸡肉粥

白斩鸡

白斩鸡

农夫山泉NFC果汁100%橙汁

  1. 鉴于以上方法的缺陷,pandas提供了一个名为drop_duplicates的去重方法。该方法只对DataFrame或者Series类型有效。对菜品订单详情表中的dishes_name列利用drop_duplicates的方法进行去重操作,如代码 43所示。

代码 43 使用drop_duplicates方法对菜品名称去重

In[3]:

dishes_name = detail['dishes_name'].drop_duplicates() ##对dishes_name去重

print('drop_duplicates方法去重之后菜品总数为:',len(dishes_name))

Out[3]:

drop_duplicates方法去重之后菜品总数为:143

  1. 事实上drop_duplicates方法不仅支持单一特征的数据去重,还能够依据DataFrame的其中一个或者几个特征进行去重操作,具体用法如代码 44所示。

代码 44 使用drop_duplicates方法对多列去重

In[4]:

print('去重之前订单详情表的形状为:', detail.shape)

shapeDet = detail.drop_duplicates(subset = ['order_id','emp_id']).shape

print('依照订单编号,会员编号去重之后订单详情表大小为:', shapeDet)

Out[4]:

去重之前订单详情表的形状为: (1546,18)

依照订单编号,会员编号去重之后订单详情表大小为: (162, 18)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本软件为Excel加载宏程序,专门为经常用Excel进行各种数据计算的朋友开发。能在用户输入任何一个数据后即时进行检测,如发现该列中已有相同数据则发出警告,以达到避免在同一列中输入相同数据的目的。 <P><P> 安装方法:<BR>先将本压缩包中的CCheck21P.xla解压至Office的安装目录下的"OfficeLibrary"中(例如:您的Office安装在"C:Program Files"中,那么您就把pay_slip.xla解压至"C:Program FilesMicrosoft OfficeOfficeLibrary"里。)然后启动Excel,点击“工具”——“加载宏”,在“检测同列重复工具”这个加载宏前面的框中打勾,最后按“确定”。这时将出现一个欢迎使用的对话框,到此就安装完成了。<P> 使用方法:<BR> 在本工具默认状态下,每当用户向工作表中输入一个数以后,本工具都将对其进行检测,如果发现当前列中已有相同数据则发出警告,并询问用户是否要将刚才输入的数据删除。如果选择“是”,则将刚才输入的数据删除,否则仍将按照用户的意愿将其保留。检测的速度非常快,如果你的机器不是太古董级的话,一般来说是不影响数据输入工作的。<BR> 如果用户想暂时停用检测功能,只需要在“工具”——“检测同列重复”中选择“禁止进行检测”即可。当然,如果想恢复使用检测功能,只需要在“工具”——“检测同列重复”中选择“允许进行检测”就行了。<BR> 另外,本工具还可以手动对某一列数据进行检测!<P> 注意事项:<BR> 基于VBA功能的限制以及运行速度上的考虑,本工具只支持在同列中向上进行检测。也就是说,本工具将默认用户的输入习惯为:每输入完毕一个数据后按回车结束或以向下移动光标来结束。如果您的输入习惯不同寻常,则本工具将无法正确进行检测。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值