利用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物件,該物件的資料如下:
對應的建立程式碼為
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大法好!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。