資料分析 三 pandas空值清洗
阿新 • • 發佈:2021-01-02
有兩種丟失資料:
- None
- np.nan(NaN)
import pandas as pd import numpy as np from pandas import Series,DataFrame
1. None
None是Python自帶的,其型別為python object。因此,None不能參與到任何計算中。
print(type(None))
<class 'NoneType'>
2. np.nan(NaN)
np.nan是浮點型別,能參與到計算中。但計算的結果總是NaN。
print(type(np.nan))
<class 'float'>
np.nan +1 ==> nan
3. pandas中的None與NaN
1) pandas中None與np.nan都視作np.nan
建立DataFramedf = DataFrame(data= np.random.randint(0,100,size=(8,10)))
df
#將某些陣列元素賦值為nan
df.iloc[2,5]=None df.iloc[5,3]=None df.iloc[7,7]=np.nan df # 結果都是nan
2) pandas處理空值操作
# 刪行
# 相鄰賦值
isnull()
notnull()
dropna()
: 過濾丟失資料fillna()
: 填充丟失資料
(1)判斷函式
isnull()
notnull()
df.isnull().any(axis=1) ======================= 0 False 1 False 2 True 3 False 4 False 5 True 6 False 7 True dtype: bool
df.notnull().all(axis=1) ============ 0 True 1 True 2 False 3 True4 True 5 False 6 True 7 False dtype: bool
固定搭配 isnull+any
notnull+all
- df.notnull/isnull().any()/all()
#過濾df中的空值(只保留沒有空值的行) df.loc[df.notnull().all(axis=1)]
用df.dropna()就可以替代上面多步的操作,一步到位
可以選擇過濾的是行還是列(預設為行):axis中0表示行,1表示的列
df.dropna(axis=0)
(3) 填充函式 Series/DataFrame
fillna()
:value和method引數- method=> bfill 後覆蓋, ffill 前覆蓋 axis =>0列 1行
可以選擇前向填充還是後向填充
df.fillna(method='bfill',axis=0) # 列的後覆蓋
============================================
練習7:
-
簡述None與NaN的區別
-
假設張三李四參加模擬考試,但張三因為突然想明白人生放棄了英語考試,因此記為None,請據此建立一個DataFrame,命名為ddd3
-
老師決定根據用數學的分數填充張三的英語成績,如何實現? 用李四的英語成績填充張三的英語成績?
============================================