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


    检测与处理记录重复值

    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)

  • 相关阅读:
    mysql字段类型与oracle字段类型对应关系
    提升代码重用性:模板设计模式在实际项目中的应用
    SpringBoot 配置进阶
    基于Android平台的手机安全卫士的设计与实现
    【Pandas】数据透视表函数 pivot_table()
    【wespeaker】模型ECAPA_TDNN介绍
    一文彻底弄懂Linux-Shell编程
    前端培训丁鹿学堂:前端也要了解的计算机基础(一)
    【QT】事件分发器/事件过滤器/事件处理的介绍和使用
    微信红包封面小程序源码-后台独立版-带测评积分功能源码
  • 原文地址:https://blog.csdn.net/u011062044/article/details/127453140