1. 程式人生 > >python pandas 如何去掉/保留資料集中的重複行?

python pandas 如何去掉/保留資料集中的重複行?

摘要:本文主要是關於如何把去掉資料集中的重複行,也就是去重的工作。

應用場景:

假如我們有如下的一個數據集,6行4列。


此時,我們3個想法。

第一個想法:把所有重複的行去掉

第二個想法:只保留第一次出現的重複行

第三個想法:保留最後一次出現的重複行

這三個想法都可以用pandas中自帶一個方法實現。 DataFrame.drop_duplicates()

具體實現如下:

import pandas as pd 
newdata=pd.DataFrame([[1,1,1,1],[1,1,1,1],[2,1,4,3],[5,6,7,9],[5,4,2,1],[2,1,4,9]],columns=['A','B','C','D'])
newdata.drop_duplicates(subset=['A','B','C','D'],keep=False)


上面這一句程式碼就是把所有重複的行去掉,subset這個引數後面我會提到,keep這個引數就是選擇我們前面三個想法中的哪一個?

當keep=False時,就是去掉所有的重複行

當keep=‘first'時,就是保留第一次出現的重複行

當keep='last'時就是保留最後一次出現的重複行。(注意,這裡的引數是字串)


可以看到,第0行和第1行都被去掉了。

newdata.drop_duplicates(subset=['A','B','C','D'],keep='first')


可以看到,第1行被去掉,保留了第0行。當keep='last'時這裡就不演示了。

------------------------------------------------------------------------------

下面講一下subset這個引數。
在上面的場景中,我們對重複的定義是:在某一行,若A、B、C、D這四列如果都相同的話就是重複。
但是有時候,我們重複並不需要所有列都相同,我們只需要其中的某幾列相同就可以當作重複。因此subset這個引數就是來設定這個的。
舉個栗子,還是上面這個資料集,如果我們想把A列和B列中元素相同的行去掉,只保留第一次出現的行,要怎麼做?

很簡單,

newdata.drop_duplicates(subset=['A','B'],keep='first')

從結果上我們可以看到,第0行和第1行由於A列B列相同,而且選擇保留第一次出現的行,所以第1行被去掉。
第2行和第5行的A列B列相同,保留第一次出現的行,所以第5行被去掉。