重复值处理 - 清洗 DataFrame 中的各种重复类型 - Python代码
目錄
所有列是否完全重復
指定某一列是否重復
根據多列判斷是否重復,防止誤刪數據
其他數據預處理方法
通過八爪魚或者火車頭等采集器從全網抓取的數據中,總會存在各種各樣的重復數據,為保證數據在使用過程中的準確性,總要先進行一番清洗。
所有列是否完全重復
在Pandas中,.duplicated()表示找出重復的行,默認是判斷全部列,返回布爾類型的結果。對于完全沒有重復的行,返回 False,對于有重復的行,第一次出現的那一行返回 False,其余的返回 True。
與.duplicated()對應的,.drop_duplicates()表示去重,即刪除布爾類型為 True的所有行,默認是判斷全部列。
import pandas as pd import numpy as np from pandas import DataFrame,Series#讀取文件 datafile = u'E:\\pythondata\\tt.xlsx'#文件所在位置,u為防止路徑中有中文名稱,此處沒有,可以省略 data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件則用read_csv examDf = DataFrame(data) examDf#輸出源數據,直觀的查看哪些行是重復的運行結果:?
| Jay | 175 | 1979 | 摩羯座 | O |
| Jay | 175 | 1979 | 摩羯座 | O |
| Jolin | 156 | 1980 | 處女座 | A |
| Jolin | 156 | 1980 | NaN | A |
| Hannah | 165 | 1993 | 獅子座 | B |
| JJ | 173 | 1981 | 白羊座 | O |
| Eason | 173 | 1974 | 獅子座 | O |
很明顯,第 0 行和第 1 行是完全重復的,開始去重,接著上面的代碼,
#去重 print(examDf.duplicated())#判斷是否有重復行,重復的顯示為TRUE, examDf.drop_duplicates()#去掉重復行指定某一列是否重復
上述的數據中我們可以發現,第 2 行和第 3 行其實都是?Jolin 的信息,那么也是需要去重的。.duplicated()默認是判斷全部列,那么加一點東西,就可以判斷指定某一列了。
print(examDf.duplicated('name'))#判斷name列是否有重復行,重復的顯示為TRUE, examDf.drop_duplicates('name')#去掉重復行運行結果:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
在實際應用中,需要指定的這一列往往是合同號,項目編號這一類的
根據多列判斷是否重復,防止誤刪數據
僅僅根據name列判斷是否重復,難免會把重名的另一個人的信息誤刪,比如娛樂圈的楊洋(小鮮肉男)和楊洋(快女),僅根據name判斷是否重復的話,肯定會將其中一人的信息判斷為重復數據,那么就增加幾個判斷條件,比如根據姓名,性別,生日三個條件來判斷的話,誤刪的幾率就會大大的減少。
import pandas as pd import numpy as np from pandas import DataFrame,Series#讀取文件 datafile = u'E:\\pythondata\\tt.xlsx'#文件所在位置,u為防止路徑中有中文名稱,此處沒有,可以省略 data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件則用read_csv examDf = DataFrame(data) print(examDf.duplicated(['name','sex','birthday']))#判斷name,sex,birthday列是否有重復行,重復的顯示為TRUE, examDf.drop_duplicates(['name','sex','birthday'])#去掉重復行運行結果:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
望指正!
其他數據預處理方法
拉格朗日插值法補充缺失值
連續數據離散化(等寬、等頻、聚類離散)
數據預處理 - 歸一化與標準化
總結
以上是生活随笔為你收集整理的重复值处理 - 清洗 DataFrame 中的各种重复类型 - Python代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么给域账号映射服务器,如何给每个域用户
- 下一篇: python list存储对象_《pyt