pandas 缺失值與空值處理的實現方法
1.相關函式
- df.dropna()
- df.fillna()
- df.isnull()
- df.isna()
2.相關概念
空值:在pandas中的空值是""
缺失值:在dataframe中為nan或者naT(缺失時間),在series中為none或者nan即可
3.函式具體解釋
DataFrame.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)
函式作用:刪除含有空值的行或列
axis:維度,axis=0表示index行,axis=1表示columns列,預設為0
how:"all"表示這一行或列中的元素全部缺失(為nan)才刪除這一行或列,"any"表示這一行或列中只要有元素缺失,就刪除這一行或列
thresh:一行或一列中至少出現了thresh個才刪除。
subset:在某些列的子集中選擇出現了缺失值的列刪除,不在子集中的含有缺失值得列或行不會刪除(有axis決定是行還是列)
inplace:刷選過缺失值得新資料是存為副本還是直接在原資料上進行修改。
例子:
df = pd.DataFrame({"name": ['Alfred','Batman','Catwoman'],"toy": [np.nan,'Batmobile','Bullwhip'],"born": [pd.NaT,pd.Timestamp("1940-04-25"),pd.NaT]}) print df
預設引數:刪除行,只要有空值就會刪除,不替換。
print df.dropna() print df
print "delete colums" print df.dropna(axis=1) #delete col
print "所有值全為缺失值才刪除" print df.dropna(how='all')
print "至少出現過兩個缺失值才刪除" print df.dropna(thresh=2)
print "刪除這個subset中的含有缺失值的行或列" print df.dropna(subset=['name','born'])
DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None,**kwargs)
函式作用:填充缺失值
value:需要用什麼值去填充缺失值
axis:確定填充維度,從行開始或是從列開始
method:ffill:用缺失值前面的一個值代替缺失值,如果axis =1,那麼就是橫向的前面的值替換後面的缺失值,如果axis=0,那麼則是上面的值替換下面的缺失值。backfill/bfill,缺失值後面的一個值代替前面的缺失值。注意這個引數不能與value同時出現
limit:確定填充的個數,如果limit=2,則只填充兩個缺失值。
示例:
df = pd.DataFrame([[np.nan,2,np.nan,0],[3,4,1],[np.nan,5],3,4]],columns=list('ABCD')) print df print "橫向用缺失值前面的值替換缺失值" print df.fillna(axis=1,method='ffill') print "縱向用缺失值上面的值替換缺失值" print df.fillna(axis=0,method='ffill')
print df.fillna(0)
不同的列用不同的值填充:
對每列出現的替換值有次數限制,此處限制為一次
DataFrame.isna()
判斷是不是缺失值:
isnull同上。
替換空值:
df = pd.DataFrame([[np.nan,"",columns=list('ABCD')) print df
如上,缺失值是NAN,空值是沒有顯示。
替換空值程式碼:需要把含有空值的那一列提出來單獨處理,然後在放進去就好。
clean_z = df['C'].fillna(0) clean_z[clean_z==''] = 'hello' df['C'] = clean_z print df
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。