MySQL、Python中数据去重的操作方法

上一篇介绍了SPSS软件中数据去重的方法,今天介绍MySQL和Python两个软件中如何消除重复值。

首先来看如何通过SQL语句消除重复数据。

在数据库中导入orders表,包括OrderID、CustomerID、Quantity、PricePerItem四个字段,orders表中的数据如下:

假设现在要查看CustomerID列的唯一值,用DISTINCT关键字就可以返回要查询列的唯一值,执行语句如下:

Select Distinct CustomerID from orders;

结果如下:

关键字DISTINCT总是紧随在SELECT之后。在这个示例中,只有3个唯一的CustomerID,所以只返回了3行。

假设现在想查看CustomerID和Quantity的唯一组合,执行语句如下:

Select Distinct CustomerID,Quantity from orders;

结果如下:

请注意,CustomerID为3所对应的Quantity在原表中有两条记录,在结果表中只列出了一次,就是因为DISTINCT关键字导致返回的列中只能显示唯一的值。

以上就是在MySQL数据库中消除重复值的操作方法,再看看在Python中是如何实现的。

Python中有两种方法可以实现消除重复数据,一种是unique函数,一种是drop_duplicates。

先看第一种方法unique函数,unique返回的是一组数据,可理解为一维数组。

把数据读取到Python中,同样把数据集命名为orders。数据展示如下。

要查看CustomerID的唯一值,并把值赋给CusID,执行语句如下:

CusID=orders[“CustomerID”].unique()

CusID

其结果如下:

CusID的结果是一维数组,包含的元素是1、2、3。

第二种方法drop_duplicates用于返回一个移除了重复行的DataFrame,它可以指定部分列进行重复项判断。

假设现在只根据CustomerID列删除重复项,执行语句如下:

orders.dupliactes([“CustomerID”])

结果如下:

返回3行,因为CustomerID的唯一值只有3行。

如果要根据CustomerID和Quantity删除重复项,执行语句如下:

orders.dupliactes([“CustomerID”,“Quantity”])

结果如下:

这次返回的结果是4行,因为CustomerID和Quantity值都相同的只有2行,最后只保留其中1行。drop_duplicates默认保留的是第一个出现的值组合,传入keep=“last”则保留最后一个。

以上是关于如何在MySQL和Python中实现数据去重的操作方法,最后再介绍一种通用方法,此方法只针对某一列进行去重操作,这种方法就是分组。分组不论是在Excel、 SPSS、MySQL还是Python等各种统一软件中,都能实现对单一列取唯一值。

同样以orders表中的CustomerID列为例,在MySQL中,与“Select Distinct CustomerID from orders;”等价的分组语句是

“Select CustomerID from orders

group by CustomerID;”

运行后,返回的结果如下:

在Python中分组的语句如下:

orders.groupby([“CustomerID”])

把分组的结果赋给group:

group= orders.groupby([“CustomerID”])

最后求group的个数:

len(group)

结果如下:

返回的结果为3,说明消除重复值后的CustomeID只有3个。

如果想知道具体是哪3个CustomerID,可以把语句改为:

group=orders.groupby([“CustomerID”])[“CustomerID”].count()

len(group)

其结果如下:

解释下第一条语句,后面加了[“CustomerID”].count(),这里是对CustomerID列进行计数,在结果中可以看到CustomerID值有1、2、3,且对应的数量分别是1、2、2,与orders表是一致的。

下一篇将介绍Excel中数据去重的操作方法。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180713G1XONG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券