上一篇介绍了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中数据去重的操作方法。
领取专属 10元无门槛券
私享最新 技术干货