1. 程式人生 > 其它 >pandas之去重

pandas之去重

“去重”通過字面意思不難理解,就是刪除重複的資料。在一個數據集中,找出重複的資料刪並將其刪除,最終只儲存一個唯一存在的資料項,這就是資料去重的整個過程。刪除重複資料是資料分析中經常會遇到的一個問題。通過資料去重,不僅可以節省記憶體空間,提高寫入效能,還可以提升資料集的精確度,使得資料集不受重複資料的影響。

Panda DataFrame 物件提供了一個數據去重的函式drop_duplicates(),本節對該函式的用法做詳細介紹。

函式格式

drop_duplicates()函式的語法格式如下:
df.drop_duplicates(subset=['A','B','C'],keep='first',inplace=True)
引數說明如下:
  • subset:表示要進去重的列名,預設為 None。
  • keep:有三個可選引數,分別是 first、last、False,預設為 first,表示只保留第一次出現的重複項,刪除其餘重複項,last 表示只保留最後一次出現的重複項,False 則表示刪除所有重複項。
  • inplace:布林值引數,預設為 False 表示刪除重複項後返回一個副本,若為 Ture 則表示直接在原資料上刪除重複項。

實際應用

首先建立一個包含有重複值的 DataFrame 物件,如下所示:
  1. import pandas as pd
  2. data={
  3. 'A':[1,0,1,1],
  4. 'B':[0,2,5,0],
  5. 'C':[4,0,4,4],
  6. 'D':[1,0,1,1]
  7. }
  8. df=pd.DataFrame(data=data)
  9. print(df)
輸出結果:
  A B C D
0 1 0 4 1
1 0 2 0 0
2 1 5 4 1
3 1 0 4 1

1) 預設保留第一次出現的重複項

import pandas as pd
data={
  
    'A':[1,0,1,1],
    'B':[0,2,5,0],
    'C':[4,0,4,4],
    'D':[1,0,1,1]
}
df=pd.DataFrame(data=data)
#預設保留第一次出現的重複項
df.drop_duplicates()
輸出結果:
  A B C D
0 1 0 4 1
1 0 2 0 0
2 1 5 4 1

2) keep=False刪除所有重複項

  1. import pandas as pd
  2. data={
  3. 'A':[1,0,1,1],
  4. 'B':[0,2,5,0],
  5. 'C':[4,0,4,4],
  6. 'D':[1,0,1,1]
  7. }
  8. df=pd.DataFrame(data=data)
  9. #預設保留第一次出現的重複項
  10. df.drop_duplicates(keep=False)
輸出結果:
  A B C D
1 0 2 0 0
2 1 5 4 1

3) 根據指定列標籤去重

  1. import pandas as pd
  2. data={
  3. 'A':[1,3,3,3],
  4. 'B':[0,1,2,0],
  5. 'C':[4,5,4,4],
  6. 'D':[3,3,3,3]
  7. }
  8. df=pd.DataFrame(data=data)
  9. #去除所有重複項,對於B列來說兩個0是重複項
  10. df.drop_duplicates(subset=['B'],keep=False)
  11. #簡寫,省去subset引數
  12. #df.drop_duplicates(['B'],keep=False)
  13. print(df)
輸出結果:
  A B C D
1 3 1 5 3
2 3 2 4 3
從上述示例可以看出,刪除重複項後,行標籤使用的數字是原來的,並沒有從 0 重新開始,那麼我們應該怎麼從 0 重置索引呢?Pandas 提供的 reset_index() 函式會直接使用重置後的索引。如下所示:
import pandas as pd

data={
   
    'A':[1,3,3,3],
    'B':[0,1,2,0],
    'C':[4,5,4,4],
    'D':[3,3,3,3]
}
df=pd.DataFrame(data=data)
#去除所有重複項,對於B來說兩個0是重複項
df=df.drop_duplicates(subset=['B'],keep=False)
#重置索引,從0重新開始
df.reset_index(drop=True)
輸出結果:
  A B C D
0 3 1 5 3
1 3 2 4 3

4) 指定多列同時去重

建立一個 DataFrame 物件,如下所示:
  1. import numpy as np
  2. import pandas as pd
  3. df = pd.DataFrame({'Country ID':[1,1,2,12,34,23,45,34,23,12,2,3,4,1],
  4. 'Age':[12,12,15,18, 19, 25, 21, 25, 25, 18, 25,12,32,18],
  5. 'Group ID':['a','z','c','a','b','s','d','a','b','s','a','d','a','f']})
  6. #last只保留最後一個重複項
  7. df.drop_duplicates(['Age','Group ID'],keep='last')
輸出結果:
  Country ID Age Group ID
0   1         12      a
1   1         12      z
2   2         15      c
3   3         18      a
4   4         19      b
5   3         25      s
6   4         21      d
8   2         25      b
9   1         18      s
10  2         25      a
11  3         12      d
12  4         32      a
13  1         18      f
上述資料集中,第 7 行、第 10 行對應的列標籤資料相同,我們使用引數值“last”保留最後一個重複項,也就是第 10 行資料。

關注微信公眾號「站長嚴長生」,在手機上閱讀所有教程,隨時隨地都能學習。本公眾號由C語言中文網站長運營,每日更新,堅持原創,敢說真話,凡事有態度。