用Python進行數據清洗方式,這幾種都很常見!
大家好~我是小刀!
在數據分析中,數據清洗是一個必備階段。數據分析所使用的數據一般都很龐大,致使數據不可避免的出現重復、缺失、格式錯誤等異常數據,如果忽視這些異常數據,可能導致分析結果的準確性。
用以下數據為例,進行講解數據清洗常用方式:
下面的操作只做示例,具體數據的清洗方式要根據數據特性進行選擇!
重復值處理
重復值處理,一般采用直接刪除重復值的方式。在pandas中,可以用duplicated函數進行查看和drop_duplicates函數刪除重復數據。
如下所示,可以通過duplicated函數查看重復的數據:
需要刪除重復值時,可直接用drop_duplicates函數完成:
缺失值處理
缺失值與重復值一樣,都是數據中比較常見的問題,必須進行處理才能進行下一步分析,保證分析的準確性。缺失值在數據中一般用NaN表示,在處理缺失值時,一般采用刪除和填補方式進行處理。但在實際中,缺失值的處理是一件非常困難的事情,刪除和填補方式都無法解決,最后只能留著。
在pandas中,其有多種方式查看和處理缺失值的方法。
查看缺失值
最為基礎的可以通過isnull和notnul,或者info函數來實現。
用info函數可以很清楚的知道每一列的缺失值情況,進而做出判斷處理:
isnull函數為判斷序列元素是否為缺失,notnul函數判斷序列元素是否不為缺失,二者在本質上是一樣的。而二者在數據量龐大時,效果很差。所以一般不會單獨使用,而是配合其它方法進行使用。
查看某列缺失值所在的行:
isnull函數配合sum函數計算每列缺失值的個數:
在多數查看缺失值中,經常會采用計算缺失值在列中占比的方式,判斷缺失對數據具有多大的影響,從而選擇是刪除數據還是填補數據。計算占比可使用以下方式:
- df.apply(lambda x: x.isnull().sum()/x.size)
x.size為各個數據列總行數:
缺失值刪除
刪除缺失值的情形,一般是在不會影響分析結果、造成的影響無傷大雅,或者難以填補的時候采用。
在pandas中,可以直接用dropna函數進行刪除所有含有缺失值的行,或者選擇性刪除含有缺失值到的行:
缺失值填補
在無法直接刪除缺失值時,或者包含缺失值的行具有很多而無法選擇性刪除時,填補是最佳的選擇,但填補的方式要根據數據來選擇,否則填補的數據依然會影響分析的準確性。
在pandas中,可以使用fillna函數完成對缺失值的填補,例如對表中的體重列進行填補,填補方法為中位數:
或者用平均值填補:
也可以用pandas中的ffill函數對缺失值進行前向填補,但在前向填補時需要注意各個列數據的情況:
但可以看到,體重列的第一行未填補完成,而pandas中提供了bfill函數進行后向填補:
數據類型轉換
數據類型關乎后面的數據處理和數據可視化,不同的數據類型處理和進行可視化的用法都不一樣,因此,事先把數據的類型轉換好,利于后面的相關步驟。
在pandas中,可以用info和dtypes方法進行查看數據類型:
常用的數據類型包括str(字符型)、float(浮點型)和int(整型)。當某列數據的類型出現錯誤時,可通過astype函數進行強制轉換數據類型。例如下面通過astype函數對數值型列轉換為字符型:
文本處理
在數據中,文本在某種程度上可以說是最‘臟’的數據,不管在錄入的數據,還是爬取的數據,總會出現各種各樣的‘臟’數據,處理難度非常高。在處理中,主要是切分字符串、值替換。
pandas提供了df.str.split.str()方法對字符串的切割,以下通過此方法獲得地級市名稱:
對于一些多數詞,可以通過df.str.replace()方法進行增加、替換或者刪除:
以上就是本文的全部內容了,如果你喜歡或者對你有幫助,請給我點個贊吧!