數(shù)據(jù)缺失
數(shù)據(jù)缺失在大部分數(shù)據(jù)分析應(yīng)用中都很常見,Pandas使用浮點值NaN表示浮點和非浮點數(shù)組中的缺失數(shù)據(jù),他只是一個便于被檢測出來的數(shù)據(jù)而已。
Python內(nèi)置的None值也會被當(dāng)作NA處理
處理NA的方法有四種:dropna,fillna,isnull,notnull
is(not)null,這一對方法對對象做出元素級的應(yīng)用,然后返回一個布爾型數(shù)組,一般可用于布爾型索引。
dropna,對于一個Series,dropna返回一個僅含非空數(shù)據(jù)和索引值的Series。
問題在于DataFrame的處理方式,因為一旦drop的話,至少要丟掉一行(列)。這里解決方法與前面類似,還是通過一個額外的參數(shù):dropna(axis=0,how=’any’,thresh=None),how參數(shù)可選的值為any或者all.all僅在切片元素全為NA時才拋棄該行(列)。thresh為整數(shù)類型,eg:thresh=3,那么一行當(dāng)中至少有三個NA值時才將其保留。
fillna,fillna(value=None,method=None,axis=0)中的value除了基本類型外,還可以使用字典,這樣可以實現(xiàn)對不同列填充不同的值。
另一個過濾DataFrame行的問題涉及問題序列數(shù)據(jù)。假設(shè)只想留一部分觀察數(shù)據(jù),可以用thresh參數(shù)實現(xiàn)此目的:
不想濾除缺失的數(shù)據(jù),而是通過其他方式填補“空洞”,fillna是最主要的函數(shù)。
通過一個常數(shù)調(diào)用fillna就會將缺失值替換為那個常數(shù)值:
若是通過一個字典調(diào)用fillna,就可以實現(xiàn)對不同列填充不同的值。
可以利用fillna實現(xiàn)許多別的功能,比如可以傳入Series的平均值或中位數(shù):
檢測和過濾異常值
異常值(outlier)的過濾或變換運算在很大程度上就是數(shù)組運算。如下一個(1000,4)的標(biāo)準(zhǔn)正態(tài)分布數(shù)組:
DataFrame的duplicated方法返回一個布爾型Series,表示各行是否是重復(fù)行。
與此相關(guān)的還有一個drop_duplicated方法,它用于返回一個移除了重復(fù)行的DataFrame:
上面的兩個方法會默認判斷全部列,也可以指定部分列進行重復(fù)項判斷,假設(shè)還有一列值,而只希望根據(jù)k1列過濾重復(fù)項。duplicates和drop_duplicates默認保留第一個出現(xiàn)的值組合。傳入take_last=True則保留最后一個