利用Pandas来清除重复数据

一.前言

最近刚好在练手一个数据挖掘的项目,众所周知,数据挖掘中比较重要的一步为数据清洗,而对重复数据的处理也是数据清洗中经常碰到的一项。本文将仅介绍如何利用Pandas来清除重复数据(主要指重复行),话不多说请看下文。

二.具体介绍

2.1. 导入Pandas库

pandas是python的核心数据分析库,你可以把它理解为python版的excel,倘若你还没有安装相应的库,请查询相关教程进行安装,导入pandas的代码为:

import pandas as pd

2.2. DataFrame.duplicated和DataFrame.drop_duplicates

2.2.1. duplicated函数

duplicated函数的功能为:Return boolean Series denoting duplicate rows,即返回一个标识重复行的布尔类型的数组(Series),其中重复行将标识为true,而非重复行将标识为false。
要介绍该函数的功能,首先我随意创建一个DataFrame对象,该对象的数据如下:
animal表
对应的创建代码为

import pandas as pd

#利用字典创建DataFrame对象
animal={'class':['mammal','reptile','bird','mammal','bird','bird','reptile','mammal'],
        'name':['humans','lizard','dove','monkey','dove','dove','snake','monkey'],
        'max_speed':[42.5,56,130,79.6,130,130,66.6,79.6]}
df = pd.DataFrame(animal)

应用duplicated函数便可以得到对应的bool数组,对应的代码行为

print(df.duplicated())
'''
对应的运行结果为
            0    False
            1    False
            2    False
            3    False
            4     True
            5     True
            6    False
            7     True
            dtype: bool
'''

当然,在应用该函数时,我们可以为其指定参数,其原型为DataFrame.duplicated(self,subset,keep),其中:

  • subset参数用来指定用来识别重复的列标签/列标签序列,当未指定时默认比较整行的所有列来判别是否重复;
  • keep参数用来指定如何标记重复行,它的值有三个:first,last,False。当选择first时,重复行中除了第一次出现的全部标记为True;当选择last时,重复行中除最后一次出现的全部标记为True;当选择False时,所有重复行都将标记为True。

上述参数的代码示例为

#指定subset为class
print(df.duplicated('class'))
'''
对应的运行结果
            0    False
            1    False
            2    False
            3     True
            4     True
            5     True
            6     True
            7     True
            dtype: bool
'''

#指定subset为class,name
print(df.duplicated(['class','name']))
'''
对应的运行结果
            0    False
            1    False
            2    False
            3    False
            4     True
            5     True
            6    False
            7     True
            dtype: bool
'''

#指定keep为last
print(df.duplicated(subset=['class','name'],keep='last'))
'''
对应的运行结果
            0    False
            1    False
            2     True
            3     True
            4     True
            5    False
            6    False
            7    False
            dtype: bool
'''

drop_duplicates函数

该函数的作用为:Return DataFrame with duplicate rows removed.即返回一个重复行被移除了的表,该函数的原型为:drop_duplicates(self,subset,keep,inplace),其中:

  • subset参数的功能和duplicated函数类似;
  • keep参数也与duplicated函数类似,不同的是:在duplicated函数中该函数是决定该标记哪些重复行,而这里是决定该删除那些重复行;
  • inplace参数是决定在本对象直接删除重复行(inplace=True, 需显示指定),还是返回一个本对象的副本并删除了对应的重复行(inplace=False, 为默认情况)。

由于subset,keep参数的功能与duplicated参数功能类似,因此这里不做详细演示,下面将展示参数inplace参数在不同情况下代码和运行结果:

#inplace=False时的错误用法,这种情况df并未改变,同时又为获取到对应的副本
df.drop_duplicates()
print(df)
'''
运行结果为
            class    name  max_speed
        0   mammal  humans       42.5
        1  reptile  lizard       56.0
        2     bird    dove      130.0
        3   mammal  monkey       79.6
        4     bird    dove      130.0
        5     bird    dove      130.0
        6  reptile   snake       66.6
        7   mammal  monkey       79.6

'''

#inplace=False时的正确用法
df_copy=df.drop_duplicates()
print(df_copy)
'''
运行结果为
            class    name  max_speed
        0   mammal  humans       42.5
        1  reptile  lizard       56.0
        2     bird    dove      130.0
        3   mammal  monkey       79.6
        6  reptile   snake       66.6
'''

#inplace=True的情况
df.drop_duplicates(inplace=True)
print(df)
'''
运行结果为
        class    name  max_speed
        0   mammal  humans       42.5
        1  reptile  lizard       56.0
        2     bird    dove      130.0
        3   mammal  monkey       79.6
        6  reptile   snake       66.6

'''

三.总结

利用Pandas中的这两个函数你可以清除数据中的重复行,或者加以指定参数你也可以指定删除数据中某项/某几项中重复的数据,总而言之,Pandas大法好!

发布了16 篇原创文章 · 获赞 18 · 访问量 4126

猜你喜欢

转载自blog.csdn.net/qq_42103091/article/details/104236873