數(shù)據(jù)缺失
數(shù)據(jù)缺失在大部分?jǐn)?shù)據(jù)分析應(yīng)用中都很常見些楣,Pandas使用浮點(diǎn)值NaN表示浮點(diǎn)和非浮點(diǎn)數(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ù),而是通過其他方式填補(bǔ)“空洞”拂封,fillna是最主要的函數(shù)茬射。
通過一個常數(shù)調(diào)用fillna就會將缺失值替換為那個常數(shù)值:
若是通過一個字典調(diào)用fillna,就可以實現(xiàn)對不同列填充不同的值冒签。
可以利用fillna實現(xiàn)許多別的功能在抛,比如可以傳入Series的平均值或中位數(shù):
檢測和過濾異常值
異常值(outlier)的過濾或變換運(yùn)算在很大程度上就是數(shù)組運(yùn)算。如下一個(1000,4)的標(biāo)準(zhǔn)正態(tài)分布數(shù)組:
DataFrame的duplicated方法返回一個布爾型Series萧恕,表示各行是否是重復(fù)行刚梭。
與此相關(guān)的還有一個drop_duplicated方法,它用于返回一個移除了重復(fù)行的DataFrame:
上面的兩個方法會默認(rèn)判斷全部列票唆,也可以指定部分列進(jìn)行重復(fù)項判斷朴读,假設(shè)還有一列值,而只希望根據(jù)k1列過濾重復(fù)項走趋。duplicates和drop_duplicates默認(rèn)保留第一個出現(xiàn)的值組合衅金。傳入take_last=True則保留最后一個