Lesson11——Pandas去重函式:drop_duplicates()

反差萌er發表於2022-02-20

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 物件,如下所示:

Example:建立資料

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)
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
"""

Example:預設保留第一次出現的重複項

print(df.drop_duplicates()) #預設保留第一次出現的重複項
"""
   A  B  C  D
0  1  0  4  1
1  0  2  0  0
2  1  5  4  1
"""

Example: keep=False 刪除所有重複項

print(df.drop_duplicates(keep=False)) #keep=False刪除所有重複項
"""
   A  B  C  D
1  0  2  0  0
2  1  5  4  1
"""

Example:去除所有重複項,對於 B 列來說兩個 0 是重複項

print(df.drop_duplicates(subset=['B'],keep=False))#去除所有重複項,對於B列來說兩個0是重複項
"""
   A  B  C  D
1  0  2  0  0
2  1  5  4  1
"""

  從上述示例可以看出,刪除重複項後,行標籤使用的數字是原來的,並沒有從 0 重新開始,那麼我們應該怎麼從 0 重置索引呢?Pandas 提供的 reset_index() 函式會直接使用重置後的索引。如下所示:

Example:

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)
print(df)
print('-------------')
#重置索引,從0重新開始
print(df.reset_index(drop=True))
"""
   A  B  C  D
1  3  1  5  3
2  3  2  4  3
-------------
   A  B  C  D
0  3  1  5  3
1  3  2  4  3
"""

Example:指定多列同時去重

  建立一個 DataFrame 物件,如下所示:

df = pd.DataFrame({'Country ID':[1,1,2,12,34,23,45,34,23,12,2,3,4,1],
                    'Age':[12,12,15,18, 19, 25, 21, 25, 25, 18, 25,12,32,18],
                   'Group ID':['a','z','c','a','b','s','d','a','b','s','a','d','a','f']})
print(df)
"""
    Country ID  Age Group ID
0            1   12        a
1            1   12        z
2            2   15        c
3           12   18        a
4           34   19        b
5           23   25        s
6           45   21        d
7           34   25        a
8           23   25        b
9           12   18        s
10           2   25        a
11           3   12        d
12           4   32        a
13           1   18        f
"""
#last只保留最後一個重複項
print(df.drop_duplicates(['Age','Country ID'],keep='last'))
"""
    Country ID  Age Group ID
1            1   12        z
2            2   15        c
4           34   19        b
6           45   21        d
7           34   25        a
8           23   25        b
9           12   18        s
10           2   25        a
11           3   12        d
12           4   32        a
13           1   18        f
"""

 

相關文章