簡介
在資料進行中,pandas會将無法解析的資料或者缺失的資料使用nan來表示。雖然所有的資料都有了相應的表示,但是nan很明顯是無法進行數學運算的。
本文将會講解pandas對于nan資料的處理方法。
nan的例子
上面講到了缺失的資料會被表現為nan,我們來看一個具體的例子:
我們先來建構一個df:
上面df隻有acefh這幾個index,我們重新index一下資料:
資料缺失,就會産生很多nan。
為了檢測是否nan,可以使用isna()或者notna() 方法。
注意在python中none是相等的:
但是np.nan是不等的:
整數類型的缺失值
nan預設是float類型的,如果是整數類型,我們可以強制進行轉換:
datetimes 類型的缺失值
時間類型的缺失值使用nat來表示:
none 和 np.nan 的轉換
對于數字類型的,如果指派為none,那麼會轉換為相應的nan類型:
如果是對象類型,使用none指派,會保持原樣:
缺失值的計算
缺失值的數學計算還是缺失值:
但是在統計中會将nan當成0來對待。
如果是在cumsum或者cumprod中,預設是會跳過nan,如果不想統計nan,可以加上參數skipna=false
使用fillna填充nan資料
資料分析中,如果有nan資料,那麼需要對其進行處理,一種處理方法就是使用fillna來進行填充。
下面填充常量:
還可以指定填充方法,比如pad:
可以指定填充的行數:
fill方法統計:
方法名
描述
pad / ffill
向前填充
bfill / backfill
向後填充
可以使用pandasobject來填充:
上面操作等同于:
使用dropna删除包含na的資料
除了fillna來填充資料之外,還可以使用dropna删除包含na的資料。
插值interpolation
資料分析時候,為了資料的平穩,我們需要一些插值運算interpolate() ,使用起來很簡單:
插值函數還可以添加參數,指定插值的方法,比如按時間插值:
按index的float value進行插值:
除了插值series,還可以插值df:
interpolate還接收limit參數,可以指定插值的個數。
使用replace替換值
replace可以替換常量,也可以替換list:
可以替換df中特定的數值:
可以使用插值替換:
本文已收錄于 http://www.flydean.com/07-python-pandas-missingdata/ 最通俗的解讀,最深刻的幹貨,最簡潔的教程,衆多你不知道的小技巧等你來發現! 歡迎關注我的公衆号:「程式那些事」,懂技術,更懂你!