学科分类
目录
数据分析

重复值的处理

当数据中出现了重复值,在大多数情况下需要进行删除。例如,person_info表中id值为4的数据连续出现了两次,并且两行的数据完全一样,如图1所示。

img

图1 person_info表

Pandas提供了两个函数专门用来处理数据中的重复值,分别为duplicated()和drop_duplicates()方法。其中,前者用于标记是否有重复值,后者用于删除重复值,它们的判断标准是一样的,即只要两条数据中所有条目的值完全相等,就判断为重复值。接下来,为大家详细介绍这两个方法的基本使用,具体内容如下。

1. 通过duplicated()方法处理重复值

duplicated()方法的语法格式如下:

duplicated(subset=None, keep='first')

上述方法中参数的含义如下:

(1) subset:用于识别重复的列标签或列标签序列,默认识别所有的列标签。

(2) keep:删除重复项并保留第一次出现的项,取值可以为first、last或False,它们代表的含义如下:

  • first:从前向后查找,除了第一次出现外,其余相同的被标记为重复。默认为此选项。

  • last:从后向前查找,除了最后一次出现外,其余相同的被标记为重复。

  • False:所有相同的都被标记为重复。

duplicated()方法用于标记Pandas对象的数据是否重复,重复则标记为True,不重复则标记为False,所以该方法返回一个由布尔值组成的Series对象,它的行索引保持不变,数据则变为标记的布尔值。

注意:

对于duplicated()方法,这里有如下两点要进行强调:

第一,只有数据表中两个条目间所有列的内容都相等时,duplicated()方法才会判断为重复值。除此之外,duplicated()方法也可以单独对某一列进行重复值判断。

第二,duplicated()方法支持从前向后(first)和从后向前(last)两种重复值查找模式,默认是从前向后查找判断重复值的。换句话说,就是将后出现的相同条目判断为重复值。

为了更好地理解duplicated()方法的使用,接下来,通过一个示例来演示如何从前向后查找并判断person_info表中的重复值,具体代码如下:

In [11]: import pandas as pd
         person_info = pd.DataFrame({'id': [1, 2, 3, 4, 4, 5],
                                   'name': ['小铭', '小月月', '彭岩', '刘华', '刘华', '周华'],
                                   'age': [18, 18, 29, 58, 58, 36],
                                   'height': [180, 180, 185, 175, 175, 178],
                                   'gender': ['女', '女', '男', '男', '男', '男']})
        person_info.duplicated()     # 从前向后查找和判断是否有重复值

Out[11]:
0  False
1  False
2  False
3  False
4  True
5   False
dtype: bool

在上述示例中,首先创建了一个结构与person_info表一样的DataFrame对象,然后调用duplicated()方法对表中的数据进行重复值判断,使用默认的从前向后的查找方式,也就是说第二次出现的数据为重复值。

从输出结果看出,索引4对应的判断结果为True,表明这一行是重复的。

2. 通过drop_duplicates()方法处理重复值

drop_duplicates()方法的语法格式如下:

drop_duplicates(subset=None, keep='first', inplace=False)

上述方法中,inplace参数接收一个布尔类型的值,表示是否替换原来的数据,默认为False。

接下来,使用drop_duplicates()方法将person_info表中的重复数据进行删除,示例代码如下。

In [12]: import pandas as pd
         person_info = pd.DataFrame({'id': [1, 2, 3, 4, 4, 5],
                                   'name': ['小铭', '小月月', '彭岩', '刘华', '刘华', '周华'],
                                   'age': [18, 18, 29, 58, 58, 36],
                                   'height': [180, 180, 185, 175, 175, 178],
                                   'gender': ['女', '女', '男', '男', '男', '男']})
        person_info. drop_duplicates()

 Out[12]:
      id name age height gender
   0  1  小铭  18   1801  2 小月月  18  1802  3  彭岩  29   1853  4  刘华  58   1755  5  周华  36   178

上述代码中,同样创建了一个结构与person_info表一样的DataFrame对象,之后调用drop_duplicates()方法执行删除重复值操作。从输出结果看出,name列中值为“刘华”的数据只出现了一次,重复的数据已经被删除了。

注意:

删除重复值是为了保证数据的正确性和可用性,为后期对数据的分析提供了高质量的数据。

点击此处
隐藏目录