Python常用的數(shù)據(jù)清洗方法詳解
Python常用的數(shù)據(jù)清洗方法
在數(shù)據(jù)處理的過程中,一般都需要進行數(shù)據(jù)的清洗工作,如數(shù)據(jù)集是否存在重復(fù)、是否存在缺失、數(shù)據(jù)是否具有完整性和一致性、數(shù)據(jù)中是否存在異常值等。當發(fā)現(xiàn)數(shù)據(jù)中存在如上可能的問題時,都需要有針對性地處理,本文介紹如何識別和處理重復(fù)觀測、缺失值和異常值。
重復(fù)觀測處理
重復(fù)觀測是指觀測行存在重復(fù)的現(xiàn)象,重復(fù)觀測的存在會影響數(shù)據(jù)分析和挖掘結(jié)果的準確性,所以在數(shù)學(xué)分析和建模之前,需要進行觀測的重復(fù)性檢驗,如果存在重復(fù)觀測,還需要進行重復(fù)項的刪除。
檢測數(shù)據(jù)集的是否重復(fù),pandas 使用duplicated方法,該方法返回的是數(shù)據(jù)行每一行的檢驗結(jié)果,即每一行返回一個bool值,再使用drop_duplicates方法移除重復(fù)值。
import pandas as pd dataset= pd.read_csv("red_wine_repetition.csv") print("是否存在重復(fù)值:",any(dataset.duplicated())) #輸出:True dataset.drop_duplicates(inplace=True) dataset.to_csv('red_wine_repetition2.csv',index=False) #保存移除重復(fù)值后的數(shù)據(jù)集
缺失值處理
數(shù)據(jù)缺失在大部分數(shù)據(jù)分析應(yīng)用中都很常見,pandas使用浮點值NaN表示浮點或非浮點數(shù)組中的缺失數(shù)據(jù),python內(nèi)置的None值也會被當做缺失值處理。
pandas使用isnull方法檢測是否為缺失值,檢測對象的每個元素返回一個bool值
from numpy import NaN from pandas import Series data=Series([5, None, 15, NaN, 25]) print(data.isnull()) #輸出每個元素的檢測結(jié)果 print('是否存在缺失值:',any(data.isnull())) #輸出 :True
缺失值的處理可以采用三種方法:過濾法、填充法和插值法。過濾法又稱刪除法,是指當缺失的觀測比例非常低時(如5%以內(nèi)),直接刪除存在缺失的觀測;或者當某變量缺失的觀測比例非常高時(如85%以上),直接刪除這些缺失的變量。填充法又稱替換法,是指用某種常數(shù)直接替換那些缺失值,例如:對于連續(xù)值變量采用均值或中位數(shù)替換,對于離散值變量采用眾數(shù)替換。插值法是指根據(jù)其他非缺失的變量或觀測來預(yù)測缺失值,常見的插值法有線性插值法、KNN插值法和Lagrange插值法等。
數(shù)據(jù)過濾
數(shù)據(jù)過濾dropna 語法格式如下:dropna(axis=0, how='any', thresh=None)
(1)axis=0 表示刪除行變量;axis=1 表示刪除列變量
(2)how 參數(shù)可選值為any或all ,all表刪除全為 NaN的行
(3)thresh 為整數(shù)類型,表示刪除的條件
import pandas as pd dataset= pd.read_csv("red_wine_deficiency.csv") data1=dataset.dropna() #刪除所有的缺失值 data2=dataset.dropna(axis=1, thresh=9) #刪除有效屬性小于9的列 data3=dataset.drop("free sulfur dioxide", axis=1) #刪除free sulfur dioxide的數(shù)據(jù) print(data1,'\n---------------\n',data2,'\n---------------\n',data3)
數(shù)據(jù)填充
當數(shù)據(jù)中出現(xiàn)缺失值時,可以用其他的數(shù)值進行填充,常用的方法是fillna,其語法格式為:fillna(value=None, method=None, axis=None,inplace=Flase)
其中value值除了基本類型外,還可以使用字典,實現(xiàn)對不同的列填充不同的值,method 表示采用填充數(shù)據(jù)的方法,常用“ffill”、“bfill”
。
import pandas as pd dataset= pd.read_csv("red_wine_deficiency.csv") data1=dataset.fillna(0) #用0填補所有的缺失值 data2=dataset.fillna(method='ffill') #用前一行的值填補缺失值 data3=dataset.fillna(method='bfill') #用后一行的值填補缺失值,最后一行缺失不處理 data4=dataset.fillna(value={'pH':dataset.pH.mode()[0], #使用眾數(shù)填補 'density':dataset.density.mean(), #使用均值填補 'alcohol':dataset.alcohol.median()}) #使用中位數(shù)填補 print(data1,'\n-----\n',data2,'\n-----\n',data3,'\n-----\n',data4)
插值法
當出現(xiàn)缺失值時,也可以使用插值法來對缺失值進行插補,常見的方法為:'linear','nearest','zero','slinear','quadratic','cubic','spline','barycentric','polynomial'.
import pandas as pd dataset= pd.read_csv("red_wine_deficiency.csv") data=dataset.fillna(value={'pH':dataset.pH.mode()[0], #使用眾數(shù)填補 'density':dataset.density.interpolate(method='polynomial',order=2), #使用二項式插值填補 'alcohol':dataset.alcohol.interpolate()}) #使用線性插值填補 print(data)
異常值處理
異常值是指那些遠離正常值的觀測值,異常值的出現(xiàn)會給模型的常見和預(yù)測產(chǎn)生嚴重的后果,但有時也會利用異常值進行異常數(shù)據(jù)查找。
對于異常值的檢測,一般采用兩種方法,一種是標準差法,另一種是箱線圖判別法。標準差法的判別公式是outlier > x+nδ 或者outlier < x-nδ,其中x為樣本均值,δ為樣本標準差。當n=2時,滿足條件的觀測就是異常值;當n=3時,滿足條件的觀測就是極端異常值。箱線圖的判別公式是outlier > Q3+nIQR 或者outlier < Q1-nIQR,其中Q1為下四分位數(shù),Q3為上四分位數(shù),IQR為上四分位數(shù)和下四分位數(shù)的差,當n=1.5時,滿足條件的觀測為異常值,當n=3時,滿足條件的觀測為極端異常值。
這兩種方法的選擇標準如下,如果數(shù)據(jù)近似服從正態(tài)分布,因為數(shù)據(jù)的分布相對比較對稱,優(yōu)先選擇標準差法。否則優(yōu)先選擇箱線圖法,因為分位數(shù)并不會受到極端值的影響。當數(shù)據(jù)存在異常時,若異常觀測的比例不太大,一般可以使用刪除法將異常值刪除,也可以使用替換法,可以考慮使用低于判別上限的最大值替換上端異常值、高于判別下限的最小值替換下端異常值,或者使用均值、中位數(shù)替換
import pandas as pd import numpy as np import matplotlib.pyplot as plt dataset= pd.read_csv("red_wine_abnormal.csv") dataset=dataset['fixed acidity'] mu=dataset.mean() #計算平均值 δ=dataset.std() #計算標準差 print('標準差法異常值上限檢測:',any(dataset > mu+2*δ)) #輸出:True print('標準差法異常值下限檢測:',any(dataset < mu-2*δ)) #輸出:True Q1=dataset.quantile(0.25) #計算下四分位數(shù) Q3=dataset.quantile(0.75) #計算上四分位數(shù) IQR=Q3-Q1 print('箱線圖法異常值上限檢測:',any(dataset > Q3+1.5*IQR)) #輸出:True print('箱線圖法異常值下限檢測:',any(dataset < Q1-1.5*IQR)) #輸出:True plt.style.use('ggplot') dataset.plot(kind='hist',bins=30,density=True) dataset.plot(kind='kde') plt.show() #替換異常值 UB=Q3+1.5*IQR st=dataset[dataset < UB].max() #找出低于判斷上限的最大值 dataset.loc[dataset >UB] = st plt.style.use('ggplot') dataset.plot(kind='hist',bins=30,density=True) dataset.plot(kind='kde') plt.show()
運行不同dataset 得到的圖像
(1)異常值處理前
(2)替換異常值后
到此這篇關(guān)于Python常用的數(shù)據(jù)清洗方法詳解的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)清洗方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用Python進行數(shù)據(jù)清洗與存儲的基本方法
- 如何使用Python數(shù)據(jù)清洗庫
- 使用python數(shù)據(jù)清洗代碼實例
- 用Python進行數(shù)據(jù)清洗以及值處理
- 一文帶你深入了解Python中的數(shù)據(jù)清洗
- 三個Python常用的數(shù)據(jù)清洗處理方式總結(jié)
- Python數(shù)據(jù)清洗&預(yù)處理入門教程
- python?文件讀寫和數(shù)據(jù)清洗
- Python實現(xiàn)數(shù)據(jù)清洗的示例詳解
- python數(shù)據(jù)清洗中的時間格式化實現(xiàn)
- Python實現(xiàn)數(shù)據(jù)清洗的18種方法
相關(guān)文章
人工智能學(xué)習Pytorch張量數(shù)據(jù)類型示例詳解
這篇文章主要為大家介紹了人工智能學(xué)習Pytorch張量數(shù)據(jù)類型的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11python numpy矩陣信息說明,shape,size,dtype
這篇文章主要介紹了python numpy矩陣信息說明,shape,size,dtype,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05詳解python的xlwings庫讀寫excel操作總結(jié)
這篇文章主要介紹了詳解python的xlwings庫讀寫excel操作總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2021-02-02python基于xml parse實現(xiàn)解析cdatasection數(shù)據(jù)
這篇文章主要介紹了python基于xml parse實現(xiàn)解析cdatasection數(shù)據(jù)的方法,是非常實用技巧,需要的朋友可以參考下2014-09-09