資料處理 - 處理缺失值
阿新 • • 發佈:2021-10-19
1.處理缺失值方法
在pandas中,將缺失值稱為NA,意思是not available(不可用)
pandas在處理缺失值時,我們先了解相關函式介紹。
NA處理方法:
函式名 | 描述 |
---|---|
dropna | 根據每個標籤的值是否是缺失資料來篩選軸標籤,並根據允許丟失的資料量來確定閾值 |
fillna | 用某些值填充缺少的資料或使用插值方法(如‘ffill’或'bfill') |
isnull | 返回表名哪些值是缺失值的布林值 |
notnull | isnull的反函式 |
2.過濾缺失值
過濾缺失值方法有很多種,可以使用pandas.dropna過濾缺失值。
先看一個例子,後續以下面張三李四等人考試成績為例說明,其中把缺失值(nan)當成缺考。
import pandas as pd from numpy import nan data = pd.DataFrame([['張三', 86, 74, 69, 70, 92], ['李四', 61, 85, 68, 89, 93], ['王五', 63, 91, 98, nan, 88], ['小明', 77, None, nan, 82, 82], # None也會被當作NA處理 ['小王', nan, nan, nan, nan, nan]], columns=['姓名', '語文', '數學', '歷史', '英語', '地理']) print(data) """ 姓名 語文 數學 歷史 英語 地理 0 張三 86.0 74.0 69.0 70.0 92.0 1 李四 61.0 85.0 68.0 89.0 93.0 2 王五 63.0 91.0 98.0 NaN 88.0 3 小明 77.0 NaN NaN 82.0 82.0 4 小王 NaN NaN NaN NaN NaN """
- 過濾缺失值
##### 過濾至少一個NA的行 ##### print(data.dropna()) """ 姓名 語文 數學 歷史 英語 地理 0 張三 86.0 74.0 69.0 70.0 92.0 1 李四 61.0 85.0 68.0 89.0 93.0 """ ##### 指定哪些列過濾缺失值 ##### print(data.dropna(subset=['數學']) """ 姓名 語文 數學 歷史 英語 地理 0 張三 86.0 74.0 69.0 70.0 92.0 1 李四 61.0 85.0 68.0 89.0 93.0 2 王五 63.0 91.0 98.0 NaN 88.0 """
3.探索缺失值
##### 檢視空值 #####
print(data.isnull().sum())
"""
姓名 0
語文 1
數學 2
歷史 2
英語 2
地理 1
dtype: int64
"""
##### 取出所有有空值的記錄 #####
print(data[data.isnull().T.any()])
"""
姓名 語文 數學 歷史 英語 地理
2 王五 63.0 91.0 98.0 NaN 88.0
3 小明 77.0 NaN NaN 82.0 82.0
4 小王 NaN NaN NaN NaN Na
"""
4.補全缺失值
你有時候可能有很多種方式補全缺失值,而不是過濾缺失值,這裡我以均值補全缺失值為例講解
##### 你可能最先想到有某個值(標量)補全,比如補全數字:60 #####
print(data.fillna(60))
"""
姓名 語文 數學 歷史 英語 地理
0 張三 86.0 74.0 69.0 70.0 92.0
1 李四 61.0 85.0 68.0 89.0 93.0
2 王五 63.0 91.0 98.0 60.0 88.0
3 小明 77.0 60.0 60.0 82.0 82.0
4 小王 60.0 60.0 60.0 60.0 60.0
"""
##### 進一步以每一科成績的平均值作為填充值 #####
mean_dict = data.mean().to_dict() # 拿到字典格式的每科成績的均值
data.fillna(mean_dict, inplace=True) # 均值作為填充值補全缺失值
data = data.applymap(lambda x: '%.2f' % x if isinstance(x, (float, int)) else x) # 為了輸出結果有意義,小數保留2位
print(data)
"""
姓名 語文 數學 歷史 英語 地理
0 張三 86.00 74.00 69.00 70.00 92.00
1 李四 61.00 85.00 68.00 89.00 93.00
2 王五 63.00 91.00 98.00 80.33 88.00
3 小明 77.00 83.33 78.33 82.00 82.00
4 小王 71.75 83.33 78.33 80.33 88.75
"""
總結
在呼叫fillna補全缺失值,不僅可以傳入常量值,可以傳入設定不同的填充值的字典。