0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

重復(fù)值處理的常用方法

數(shù)據(jù)分析與開發(fā) ? 來源:Python數(shù)據(jù)科學(xué) ? 作者:Python數(shù)據(jù)科學(xué) ? 2022-03-16 13:55 ? 次閱讀

本次來介紹重復(fù)值處理的常用方法。

重復(fù)值處理主要涉及兩個部分,一個是找出重復(fù)值,第二個是刪除重復(fù)值,也就是根據(jù)自己設(shè)定的條件進(jìn)行刪除操作。

定位重復(fù)值

對于重復(fù)值,我們首先需要查看這些重復(fù)值是什么樣的形式,然后確定刪除的范圍,而查詢重復(fù)值需要用到duplicated函數(shù)。

duplicated的返回值是布爾值,返回True和False,默認(rèn)情況下會按照一行的所有內(nèi)容進(jìn)行查重。

主要參數(shù)

subset:如果不按照全部內(nèi)容查重,那么需要指定按照哪些列進(jìn)行查重。比如按照姓名進(jìn)行查重subset=['name'],那么具有相同名字的人就只會保留一個,但很可能只是重名的原因,而并非真正同一個人,所以可以按照姓名和出生日期兩列查重,subset=['name','birthday'],同理還可以再添加列,這樣就可以基本保證去重效果了。

keep:用來確定要標(biāo)記的重復(fù)值,可以設(shè)置為first、last、False。

first:除第一次出現(xiàn)的重復(fù)值,其他都標(biāo)記為True

last:除最后一次出現(xiàn)的重復(fù)值,其他都標(biāo)記為True

False:所有重復(fù)值都標(biāo)記為True

實例:

importpandasaspd
importnumpyasnp

data={
'user':['zszxz','zszxz','rose'],
'price':[100,200,-300],
'hobby':['reading','reading','hiking']
}
frame=pd.DataFrame(data)
print(frame)
------------------------
userpricehobby
0zszxz100reading
1zszxz200reading
2rose-300hiking
------------------------

frame.duplicated()
----------
0False
1False
2False
dtype:bool
-----------

上面提到duplicated返回布爾值,所以如果要想輸出這些重復(fù)值,還需要和查詢的方法配合使用df[df.duplicated()],比如:

#1、按user變量篩選重復(fù)值
frame[frame.duplicated(subset=['user'])]
-------------------
userpricehobby
1zszxz200reading
-------------------

上面按user一個變量進(jìn)行查重,但沒有設(shè)置keep參數(shù),所以默認(rèn)篩選出除了第一個以外的其它重復(fù)值。

#2、按user變量篩選重復(fù)值,保留全部重復(fù)值
frame[frame.duplicated(subset=['user'],keep=False)]
-------------------
userpricehobby
0zszxz100reading
1zszxz200reading
-------------------

上面按user一個變量進(jìn)行查重,并設(shè)置keep參數(shù)為False,所以保留了全部的重復(fù)值。

#3、按user和hobby變量篩選重復(fù)值,篩選出除最后一個重復(fù)值以外的其它重復(fù)值
frame[frame.duplicated(subset=['user','hobby'],keep='last')]
-------------------
userpricehobby
0zszxz100reading
-------------------

上面按user和hobby兩個變量進(jìn)行查重,并設(shè)置keep參數(shù)為last,所以篩選出了除最后一個重復(fù)值以外的其它重復(fù)值。

通過兩個參數(shù)的設(shè)置就可以查看自己想要的重復(fù)值了,以此判斷要刪除哪個,保留哪個。

刪除重復(fù)值

當(dāng)確定好需要刪除的重復(fù)值后,就進(jìn)行進(jìn)行刪除的操作了。

刪除重復(fù)值會用到drop_duplicates函數(shù)。

和duplicated()函數(shù)參數(shù)類似,主要有3個參數(shù):

subset:同duplicated(),設(shè)置去重的字段

keep: 這里稍有不同,duplicated()中是將除設(shè)置值以外重復(fù)值都返回True,而這里是保留的意思。同樣可以設(shè)置first、last、False

first:保留第一次出現(xiàn)的重復(fù)行,刪除其他重復(fù)行

last:保留最后一次出現(xiàn)的重復(fù)行,刪除其他重復(fù)行

False:刪除所有重復(fù)行

inplace:布爾值,默認(rèn)為False,是否直接在原數(shù)據(jù)上刪除重復(fù)項或刪除重復(fù)項后返回副本。

實例:

1、全部去重

#按全部字段刪除,在原數(shù)據(jù)frame上生效
frame.drop_duplicates(inplace=True)
print(frame)
------------------------
userpricehobby
0zszxz100reading
1zszxz200reading
2rose-300hiking
------------------------

因為上面數(shù)據(jù)中沒有全部重復(fù)的,因此沒有可刪除行。

2、指定列去重

#按user字段刪除,在原數(shù)據(jù)frame上生效
frame.drop_duplicates(subset=['user'],inplace=True)
print(frame)
------------------------
userpricehobby
0zszxz100reading
2rose-300hiking
------------------------

上面按user字段刪除重復(fù)行,保留第一個重復(fù)行,因此第二行被刪除了。但這里大家注意下,執(zhí)行刪除重復(fù)行操作后,表的索引也會被刪掉。

如需要重置可以加上reset_index(),設(shè)置drop=True,用索引替代被打亂的索引。

frame.drop_duplicates(subset=['user'],inplace=True)
frame.reset_index(drop=True)
------------------------
userpricehobby
0zszxz100reading
1rose-300hiking
------------------------

keep默認(rèn)為first,下面手動設(shè)置為last,只保留最后一個重復(fù)行。

#按全部字段刪除,在原數(shù)據(jù)frame上生效
frame.drop_duplicates(subset=['user','hobby'],keep='last',inplace=True)
print(frame)
------------------------
userpricehobby
1zszxz200reading
2rose-300hiking
------------------------

keep手動設(shè)置為False,全部刪除,這種一般很少用。

#按全部字段刪除,在原數(shù)據(jù)frame上生效
frame.drop_duplicates(subset=['user','hobby'],keep=False,inplace=True)
print(frame)
------------------------
userpricehobby
2rose-300hiking
------------------------

以上就是重復(fù)值相關(guān)的所有操作。

注意事項

在刪除重復(fù)值時,要注意下刪除的邏輯。

因為很多時候我們需要把這些離線的清洗操作在線上復(fù)現(xiàn)。

如果我們隨機(jī)地刪除重復(fù)行,沒有明確的邏輯,那么對于這種隨機(jī)性線上是無法復(fù)現(xiàn)的,即無法保證清洗后的數(shù)據(jù)一致性。

所以我們在刪除重復(fù)行前,可以把重復(fù)判斷字段進(jìn)行排序處理。

比如上面例子中,如果要對user和price去重,那么比較嚴(yán)謹(jǐn)?shù)淖龇ㄊ前凑誹ser和price進(jìn)行排序。

frame.sort_values(by=['user','price'],ascending=True).reset_index(drop=True)
--------------------
userpricehobby
0rose-300hiking
1zszxz100reading
2zszxz200reading
--------------------

因為有了排序性,只要按這個邏輯它的順序是固定的,而不是隨機(jī)的。所以無論我們設(shè)置keep為first還是last,都沒有任何影響。

原文標(biāo)題:pandas 重復(fù)數(shù)據(jù)處理大全(附代碼)

文章出處:【微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7030

    瀏覽量

    89039
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4331

    瀏覽量

    62622
  • KEEP
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    6736

原文標(biāo)題:pandas 重復(fù)數(shù)據(jù)處理大全(附代碼)

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    介紹幾種常用的傳感器數(shù)據(jù)處理方法

    在傳感器使用中,我們常常需要對傳感器數(shù)據(jù)進(jìn)行各種整理,讓應(yīng)用獲得更好的效果,以下介紹幾種常用的簡單處理方法
    發(fā)表于 07-12 10:51 ?9164次閱讀

    Sql過濾重復(fù)數(shù)據(jù)處理方法

    對于常規(guī)的MySQL數(shù)據(jù)表中可能存在重復(fù)的數(shù)據(jù),有些情況是允許重復(fù)數(shù)據(jù)的存在,有些情況是不允許的,這個時候我們就需要查找并刪除這些重復(fù)數(shù)據(jù),以下是具體的處理
    發(fā)表于 03-21 14:46

    常用的二方法有哪幾種

    識別過程分別為哪幾部分?常用的二方法有哪幾種?
    發(fā)表于 10-15 09:01

    調(diào)試嵌入式處理常用方法有哪些?

    調(diào)試嵌入式處理常用方法有哪些?
    發(fā)表于 12-24 06:08

    調(diào)試嵌入式處理器的幾種常用方法

    調(diào)試嵌入式處理器的幾種常用方法 前言 在任何產(chǎn)品
    發(fā)表于 03-11 12:25 ?1599次閱讀
    調(diào)試嵌入式<b class='flag-5'>處理</b>器的幾種<b class='flag-5'>常用</b><b class='flag-5'>方法</b>

    常用電阻標(biāo)稱

    常用電阻標(biāo)稱 設(shè)計電路時計算出來的電阻值經(jīng)常會與電阻的標(biāo)稱不相符,有時候需要根據(jù)標(biāo)稱來修正電路的計算。下面列出了常用的5%和1
    發(fā)表于 11-28 11:20 ?2374次閱讀

    常用的數(shù)字濾波方法

    平均值濾波就是對多個采樣進(jìn)行平均算法,這是消除隨機(jī)誤差最常用方法。
    的頭像 發(fā)表于 08-24 11:28 ?4.1w次閱讀

    傳感器數(shù)據(jù)常用的簡單處理方法

    在傳感器使用中,我們常常需要對傳感器數(shù)據(jù)進(jìn)行各種整理,讓應(yīng)用獲得更好的效果,以下介紹幾種常用的簡單處理方法
    的頭像 發(fā)表于 07-06 16:50 ?4412次閱讀

    傳感器使用中幾種常用的簡單處理方法

      在傳感器使用中,我們常常需要對傳感器數(shù)據(jù)進(jìn)行各種整理,讓應(yīng)用獲得更好的效果,以下介紹幾種常用的簡單處理方法
    的頭像 發(fā)表于 11-30 10:40 ?1081次閱讀

    淺談傳感器幾種常用的簡單處理方法

    在傳感器使用中,我們常常需要對傳感器數(shù)據(jù)進(jìn)行各種整理,讓應(yīng)用獲得更好的效果,以下介紹幾種常用的簡單處理方法。
    發(fā)表于 03-02 09:35 ?615次閱讀

    python處理重復(fù)方法

    處理重復(fù)是數(shù)據(jù)處理中常見的任務(wù)之一。在Python中,有幾種有效的方法可以處理
    的頭像 發(fā)表于 11-21 15:47 ?1421次閱讀

    vlookup遇到重復(fù),怎么匹配到第二個

    當(dāng)使用VLOOKUP函數(shù)時,如果在查找范圍中存在重復(fù),則該函數(shù)只會返回第一個匹配的。然而,我們可以通過一些技巧來找到第二個匹配的。下面是一些
    的頭像 發(fā)表于 12-01 10:47 ?3.2w次閱讀

    vlookup怎么把第二個重復(fù)顯示

    VLOOKUP是Excel中最常用的函數(shù)之一,它可以根據(jù)給定的在數(shù)據(jù)表中查找相應(yīng)的信息。然而,當(dāng)數(shù)據(jù)表中存在重復(fù)的查找時,VLOOKUP只能返回第一個匹配結(jié)果的數(shù)據(jù)。在本文中,我們
    的頭像 發(fā)表于 12-03 10:24 ?3230次閱讀

    gis中常用的空間分析方法

    GIS中常用的空間分析方法 GIS(地理信息系統(tǒng))是一種用于收集、存儲、處理、分析和展示地理數(shù)據(jù)的技術(shù)。空間分析是GIS的核心部分,它包括一系列方法和技術(shù),用來研究地理空間數(shù)據(jù)之間的關(guān)
    的頭像 發(fā)表于 02-25 13:44 ?5619次閱讀

    eda中常用的數(shù)據(jù)處理方法

    奠定基礎(chǔ)。 數(shù)據(jù)清洗 缺失處理 數(shù)據(jù)集中的缺失是常見的問題。處理缺失方法包括: 刪除 :
    的頭像 發(fā)表于 11-13 10:57 ?318次閱讀