在使用python進行數據分析時,如果數據集中出現缺失值、空值、異常值,那么數據清洗就是尤為重要的一步,本文將重點講解如何利用python處理缺失值
創建數據
為了方便理解,我們先創建一組帶有缺失值的簡單數據用於講解
檢查缺失值
對於現在的數據量,我們完全可以直接查看整個數據來檢查是否存在缺失值看到有兩列含有缺失值。當然如果數據集比較大的話,就需要使用data.isnull().sum()來檢查缺失值
或者使用data.info()來檢查所有數據
可以看到一共有7行,但是有兩列的非空值都不到7行
缺失值處理
一種常見的辦法是用單詞或符號填充缺少的值。例如,將丟失的數據替換為'*'。我們可以使用.fillna('*') 將所有缺失值替換為*
當然也可以針對某一列的缺失值進行填充,比如選擇score列進行填充
還有一種辦法是將其替換為平均值。如果是數字,則可以包括均值;如果是字符串,則可以選擇眾數。比如可以將score列的缺失值填充為該列的均值
當然也可以使用插值函數來填寫數字的缺失值。比如取數據框中缺失值上下的數字平均值。
或者data.fillna(axis=1,method='ffill')來橫向/縱向用缺失值前面的值替換缺失值
除了對缺失值進行填充,另一種更省事的辦法是直接刪除缺失值所在行
上面是刪除所有缺失值所在行,當然也可以指定刪除某列的缺失值比如將score列的缺失值所在行刪除
處理非標准缺失值
有時候缺失值會以其他形式出現,比如在錄入數據的時候由於失誤將數據輸錯等,那么這種類型的數據也可以作為缺失值去處理。我們來看看
可以看到,score列本應該是數字,但是卻出現兩個並不是數字也不是nan的異常值,當我們使用data.isnull()函數時,可以看到只有一個空值。
所以我們可以通過使用replace函數先將其轉換為NaN來處理此問題,然后根據需要,使用上面的方法處理缺失值。
真實數據實戰
上面我們用自己創建的數據進行示例,那么在這一節我們看在真實的數據分析案例數據來進行缺失值處理。使用的數據為之前文章使用過的NBA數據(可以查看早起python歷史文章獲取數據與更多分析),我們先導入數據並檢查缺失值
可以看到其他列的數據都很完美,只有notes列僅有5424行非空,意味着我們的數據集中超過120,000行在此列中具有空值。我們先考慮刪除缺失值。
可以看到只剩下5424條數據,但是這種形式的數據清洗對數據集沒有意義的,因為notes只是記錄了一些比賽的說明,缺少注釋對分析NBA來說不會有太大影響。並且如果我們的數據集包含一百萬條有效記錄,而一百條缺少相關數據,那么刪除不完整的記錄可能是一個合理的解決方案。
這樣,生成的DataFrame包含所有126,314場比賽記錄,但不包括有缺失值的notes列。