Python pandas處理(提取/刪除)DataFrame中的重複行

在處理數據的時候,我們經常會遇到處理重複數據的情況。根據需求一般有兩種情況,下面我們分別針對兩種情況舉?:

第一種情況,去掉重複的數據:

### 構造數據
data = pd.DataFrame(data=[['a',1],['a',2],['b',1],['b',2],['a',1]],columns=['label','num'])

data
Out[17]: 
  label  num
0     a    1
1     a    2
2     b    1
3     b    2
4     a    1

Dataframe已經有相關的函數來處理這個問題,就是drop_duplicates()函數。我們看到下面已經把重複的(’a',1)已經刪除了。具體的參數大家可以點擊鏈接,參考官方文檔。總共只有三個參數。

data.drop_duplicates()
Out[18]: 
  label  num
0     a    1
1     a    2
2     b    1
3     b    2

 我們也可以利用subset參數指定去除某一列的重複值。

data.drop_duplicates(subset='label')
Out[20]: 
  label  num
0     a    1
2     b    1

第二種情況,從數據中提取重複的數據:

DataFrame也提供了相關的函數來處理這個問題,就是duplicated()函數。我們可以看到duplicated函數返回的是布爾類型,重複出現就返回True。該函數只有兩個參數,大家可以參考官方文檔。

data.duplicated()
Out[40]: 
0    False
1    False
2    False
3    False
4     True
dtype: bool

因爲keep參數默認爲First,就是除了第一次出現的數據,其他重複的數據都標記爲True;如果我們想要獲取所有重複的數據,可以將keep的值賦值爲False。如下所示,就可以提取出所有重複的數據。

data.duplicated(keep=False)
Out[41]: 
0     True
1    False
2    False
3    False
4     True
dtype: bool

 因爲duplicated函數返回的是布爾類型,所以要想得到具體的數據可以做如下操作:

data[data.duplicated(keep=False)]
Out[42]: 
  label  num
0     a    1
4     a    1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章