1. 程式人生 > 程式設計 >利用Pandas來清除重複資料的實現方法

利用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物件,該物件的資料如下:

利用Pandas來清除重複資料的實現方法

對應的建立程式碼為

import pandas as pd

#利用字典建立DataFrame物件
animal={'class':['mammal','reptile','bird','mammal','mammal'],'name':['humans','lizard','dove','monkey','snake','monkey'],'max_speed':[42.5,56,130,79.6,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,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大法好!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。