跳到主要內容

[Pandas教學]3個實用的Pandas套件清理重複資料教學

pandas_drop_duplicate_data
當遇到一個商業問題或假設,要從各個管道蒐集資料來解決問題時,像是檔案、網頁及公開資料庫等,而在進行資料整合的過程中,如果處理流程不夠完善,就有機會產生重複的資料誤導分析的結果

本文以Kaggle網站的Amazon 2009-2019年Top50暢銷書資料集(bestsellers with categories.csv)為例,教大家如何查找及清理資料集的重複資料,提升資料的品質。重點包含:

  • Pandas duplicated()查找重複資料
  • Pandas drop_duplicates()刪除重複資料
  • Pandas groupby()、agg()群組重複資料

一、Pandas duplicated()查找重複資料

為了示範,筆者新增了一筆重複的資料,如下範例
import pandas as pd


df = pd.read_csv('bestsellers with categories.csv')
print(df)

執行結果

pandas_drop_duplicate_data
而想要使用Pandas套件查找資料集的重複資料,利用duplicated()方法(Method)可以得到每筆資料的重複狀態,True代表重複,False為沒重複,如下範例
import pandas as pd


df = pd.read_csv('bestsellers with categories.csv')
print(df.duplicated())
執行結果
pandas_drop_duplicate_data
接著,透過Pandas套件的括號[]語法即可檢視重複資料的各欄位資料,如下範例
import pandas as pd


df = pd.read_csv('bestsellers with categories.csv')
print(df[df.duplicated()])
執行結果
pandas_drop_duplicate_data
Pandas套件的duplicated()方法(Method)除了能夠查找所有欄位資料完全一樣的重複資料外,也提供了以下兩個關鍵字參數,來客製化查找的方式:
  • subset-查找特定欄位的重複資料
  • keep-保留第一筆(first)、最後一筆(last)或全部(False)的重複資料
如下範例:
import pandas as pd


df = pd.read_csv('bestsellers with categories.csv')

column_names = ['Name', 'Author', 'Year', 'Genre']

df = df[df.duplicated(subset=column_names, keep=False)]

print(df)
執行結果
pandas_drop_duplicate_data
以上範例即是查找Name(書名)、Author(作者)、Year(出版年)及Genre(類型)四個欄位都一樣的重複資料,並且全部保留。

二、Pandas drop_duplicates()刪除重複資料

從資料集裡找到重複的資料後,接下來,最常見的就是進行刪除或群組處理

而要刪除完全一樣的重複資料,可以利用Pandas套件的drop_duplicates()方法(Method),如下範例

import pandas as pd


df = pd.read_csv('bestsellers with categories.csv')

df.drop_duplicates(inplace=True)

其中,inplace關鍵字參數代表直接從現有資料集中刪除重複資料。

另外,要刪除特定欄位重複的資料,同樣可以透過subset及keep關鍵字參數來達成,如下範例

import pandas as pd


df = pd.read_csv('bestsellers with categories.csv')

column_names = ['Name', 'Author', 'Year', 'Genre']

df.drop_duplicates(subset=column_names, keep='first', inplace=True)

以上則是將Name(書名)、Author(作者)、Year(出版年)及Genre(類型)四個欄位重複的資料進行刪除,並且保留重複資料的第一筆。

三、Pandas groupby()、agg()群組重複資料

除了可以利用Pandas套件的drop_duplicates()方法(Method)刪除重複資料外,有時基於商業邏輯,可以透過群組的方式解決重複資料

在上面的範例中,我們找到了Name(書名)、Author(作者)、Year(出版年)及Genre(類型)四個欄位都一樣的重複資料,剩下的User Rating(使用者評價)、Reviews(評論數)及Price(價格)三個欄位資料假設會隨著時間而變動。

這時候,就可以利用Pandas套件的groupby()方法(Method)群組相同資料的欄位,以及agg()方法(Method),統計運算剩餘的不同資料欄位,達到合併重複資料成一筆的效果,如下範例

import pandas as pd


df = pd.read_csv('bestsellers with categories.csv')

column_names = ['Name', 'Author', 'Year', 'Genre']

summeries = {'User Rating': 'mean', 'Reviews': 'sum', 'Price': 'mean'}

df = df.groupby(by=column_names).agg(summeries).reset_index()

print(df)

執行結果

pandas_drop_duplicate_data
以上範例就是藉由計算不同資料的User Rating(使用者評價)欄位平均值、Reviews(評論數)總和及Price(價格)平均值,將Name(書名)、Author(作者)、Year(出版年)及Genre(類型)四個欄位的重複資料合併為一筆,解決資料重複的問題。

四、小結

重複資料在資料清理的過程中,可以說是最常見的問題之一,使用Pandas套件,透過duplicated()方法查找資料集的重複資料後,就能夠利用drop_duplicates()方法(Method)刪除或groupby()、agg()方法(Method)群組,來進行清理,讓資料分析的過程更加順利

本文是筆者Mike在DataCamp平台上所學到的Pandas套件資料清理技巧,加以應用和大家分享。DataCamp平台上非常多與資料科學、分析有關的教學,包含資料視覺化、清理、機器學習等,並且有專家帶領你完成資料分析專案,大家有興趣的話,可以加入DataCamp平台一起學習唷

如果喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用GoogleFacebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。

有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊

Python學習資源

Python網頁爬蟲推薦課程
Pandas資料分析教學









留言