由于資料庫或資料集中存在大量缺失資料和空值,這時在pandas中經常用NAN代替,
pandas用標簽方法表示缺失值:
一:浮點資料型別的NaN值
二:python的None物件
其中,None是一個python物件,所以不能作為任何Numpy/pandas陣列型別的缺失值,只能用于'object'陣列型別(即由python物件構成的陣列)
1 in:np.array([1,None,3,4]) 2 out:array([1,None,3,4],dtype=object)
而NaN屬于數值型別的缺失值,是一種按照IEEE浮點數標準設計,在任何系統中都兼容的特殊浮點數,
1 in:vals1=np.array([1,np.nan,3,4]) 2 vals1.dtype 3 out:dtype('float64')
并且在陣列運算中,NaN可看作是一個資料類病毒,可以把與它接觸過的資料同化,例如:
1+np.nan與1*np.nan結果均為nan,這是需要注意的,
但在實際運算中,NaN這一特性并不能讓我們得到滿意的結果,如下實體可看:
1 in:vals2=np.array([1,np.nan,3,4]) 2 vals2.sum(),vals2.min(),vals2.max() 3 out:(nan,nan,nan)
特殊的累計函式,可以忽略缺失值的影響
1 in:vals3=np.array([1,np.nan,3,4]) 2 np.nansum(vals3),np.nanmin(vals3),np.nanmax(vals3) 3 out:(8.0,1.0,4.0)
注意:這里結果是浮點型別 dtype='float64'
NaN與None:
在pandas中它們兩個是可以等價交換的
pd.Series([1,np.nan,2,None])
out:
0 1.0
1 NaN
2 2.0
3 NaN
dtype:float64
注意:其中np.nan是強制轉換成浮點數缺失值NaN,pandas會將沒有標簽值的資料型別自動轉換為NA
轉換規則如下:
| 型別 | 缺失值轉換規則 | NA標簽值 |
| floating浮點型 | 無變化 | np.nan |
| object物件型別 | 無變化 | np.nan或None |
| integer整數型別 | 強制轉換成float64 | np.nan |
| Boolean布爾型別 | 強制轉換成object | np.nan或None |
關于pandas發現、剔除、替換資料結構中的缺失值
isnull(),notnull()#回傳布爾型別,創建一個布爾型別的陣列,isnull():若是缺失值,則回傳true,否則false,而在notnull中則相反
dropna():不傳引數時,默認洗掉所有含缺失值的行,若傳入axis=1或axis='columns',則它會洗掉所有包含缺失值的列
以上會把一些非缺失值一并剔除,為避免這個情況發生,可通過設定how和thresh引數滿足
例如:
df.dropna(axis=1,how='all')則是洗掉全部為缺失值的列
df.dropna(axis='rows',thresh=2)則洗掉的行中非缺失值至少為2個,thresh用于設定行或列中非缺失值的最小數量
fillna()用于填充缺失值,將其換成有效數值
(可回傳填充了缺失值的陣列副本)
在Series中
df.fillna(0) 用0來替換缺失值
1 in:df=pd.Series([1,2,np.nan,4,5]) 2 df.fillna(0) 3 out: 4 0 1.0 5 1 2.0 6 2 0.0 7 3 4.0 8 4 5.0 9 dtype:float64
df.fillna(method='ffill') 從前往后填充
1 in:df=pd.Series([1,2,np.nan,4,5]) 2 df.fillna(method='ffill') 3 out: 4 0 1.0 5 1 2.0 6 2 2.0 7 3 4.0 8 4 5.0 9 dtype:float64
df.fillna(method='bfill') 從后往前填充
1 in:df=pd.Series([1,2,np.nan,4,5]) 2 df.fillna(method='bfill') 3 out: 4 0 1.0 5 1 2.0 6 2 4.0 7 3 4.0 8 4 5.0 9 dtype:float64
在DataFrame中
df.fillna(method='ffill',axis=1)與series用法類似,但需表明行或列
1 in:df=pd.DataFrame([[1,2,np.nan],[3,6,7],[4,np.nan,np.nan]],columns=['a','b','c']) 2 df.fillna(method='ffill',axis=0) 3 out: 4 a b c 5 0 1.0 2.0 2.0 6 1 3.0 6.0 7.0 7 2 4.0 4.0 4.0 8 dtype:float64
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/518930.html
標籤:Python
上一篇:PHP記憶體木馬病毒實作原理剖析
