當需要人為指定一個缺失值時,默認用None和np.nan來表示,用法如下
>>> import numpy as np
>>> import pandas as pd
# None被自動識別為NaN
>>> pd.Series([1, 2, None])
0 1.0
1 2.0
2 NaN
# np.nan被自動識別為NaN
>>> pd.Series([1, 2, np.nan])
0 1.0
1 2.0
2 NaN
dtype: float64
為了針對缺失值進行操作,常常需要先判斷是否有缺失值的存在,通過isna和notna兩個函數可以快速判斷,用法如下
>>> a = pd.Series([1, 2, None, 3])
>>> a
0 1.0
1 2.0
2 NaN
3 3.0
dtype: float64
# is.na 方法,如果為NaN, 返回True, 否則返回False
>>> a.isna()
0 False
1 False
2 True
3 False
dtype: bool
# notnat方法,如果為NaN, 返回False, 否則返回True
>>> a.notna()
0 True
1 True
2 False
3 True
dtype: bool
3. 缺失值的填充
通過fillna方法可以快速的填充缺失值,有兩種填充方式, 用法如下
>>> a = pd.Series([1, 2, None, 3])
>>> a
0 1.0
1 2.0
2 NaN
3 3.0
dtype: float64
# value參數,表示用一個指定的值來替換缺失值
>>> a.fillna(value=1)
0 1.0
1 2.0
2 1.0
3 3.0
dtype: float64
# method參數,指定一種方法來填充缺失值
# pad方法,表示用NaN前面一個值來進行填充
>>> a.fillna(method = 'pad')
0 1.0
1 2.0
2 2.0
3 3.0
dtype: float64
# bfill法,表示用NaN后面一個值來進行填充
>>> a.fillna(method = 'bfill')
0 1.0
1 2.0
2 3.0
3 3.0
dtype: float64
>>> df = pd.DataFrame({'A':[1, 2, None], 'B':[1, np.nan, 3]})
>>> df
A B
0 1.0 1.0
1 2.0 NaN
2 NaN 3.0
# 對每一列的NaN值,依次用對應的均值來填充
>>> df.fillna(df.mean())
A B
0 1.0 1.0
1 2.0 2.0
2 1.5 3.0
4. 缺失值的刪除
通過dropna方法來快速刪除NaN值,用法如下
>>> a.dropna()
0 1.0
1 2.0
dtype: float64
# dropna操作數據框時,可以設置axis參數的值
# 默認為0,表示去除包含 了NaN的行
# axis=1,表示去除包含了NaN的列
>>> df = pd.DataFrame({'A':[1, 2, None], 'B':[1, np.nan, 3]})
>>> df
A B
0 1.0 1.0
1 2.0 NaN
2 NaN 3.0
>>> df.dropna()
A B
0 1.0 1.0
>>> df.dropna(axis=0)
A B
0 1.0 1.0
>>> df.dropna(axis=1)
Empty DataFrame
Columns: []
Index: [0, 1, 2]
pandas中的大部分運算函數在處理時,都會自動忽略缺失值,這種設計大大提高了我們的編碼效率。同時,通過簡單上述幾種簡單的缺失值函數,可以方便地對缺失值進行相關操作。
·end·
聯(lián)系客服