大資料採集:fillna函式

阿布多abu發表於2019-08-19

大資料採集fillna函式(空白值的填充)

1.為什麼用fillna函式 在資料確實比較多的情況下可以直接濾除,而缺失資料比較少的時候,進行資料填充是很有必要的。 因此掌握fillna函式的用法就很重要,他就是解決如何處理一個DataFrame中的Nan值? 2.以下是它最簡單的2個用法(沒耐心的朋友,只需要看完這2個也夠你用了): 1.空白值替換為預設值:

df = df.fillna(0)   大資料採集:fillna函式 2.空白值按列替換為預設值:

你可以傳入一個字典,但不能傳入一個list。

df.fillna({'temperature':10,'windspeed':2,'weather':'sunny'}) 大資料採集:fillna函式 3.建立一個DataFrame,來練習下fillna函式 pd是我定義的pandas的別名,DataFrame是它的一個資料型別,可以理解為一個資料庫表。

首先透過pd.DataFrame()定義好一個資料庫表,注意它是一個二維的陣列,所以是[[ ]]定義。輸出一下可以看到,有很多空值,接下來我們就操作這個df物件。

df = pd.DataFrame([[np.nan,2,np.nan,0], [3,4,np.nan,1], [np.nan,np.nan,np.nan,5], [np.nan,3,np.nan,4]], columns=list('ABCD')) df

Out[60]: A B C D 0 NaN 2.0 NaN 0 1 3.0 4.0 NaN 1 2 NaN NaN NaN 5 3 NaN 3.0 NaN 4 大資料採集:fillna函式

text 4.fillna函式每個引數的含義(重要): 【value】 表示我給NaN位置填充一個值(比如0),或者我給每個索引(對於Series其實就是一行,只不過沒這個概念)或者列(對於DataFrame就是按列來替換空值。)   value可以是:預設值為None,變數、字典、Series、DataFrame,就是不能是list。

【method 】表示:這幾個引數的預設值都是None,使用方法來填充NaN值。

其中

backfill和bfill:是用每一列後面的值填充前面的空白(back後面)

pad和ffill:都是用前面的值填充後面的空白(front前面)

None:指定一個值去替換預設值(預設方式,其實還是用value)

【limit】表示:我要填充幾個空白值

【inplace】表示:True or False (注意別寫成true or false)

True:直接修改原物件

False:建立一個副本,修改副本,原物件不變(預設預設)·

如果這個屬性不寫,也不會有預設值False,但如果寫出來不賦值就是False了,那你需要用一個新變數來接收fillna函式的執行結果。

【axis】表示:修改填充方向

{0 or ‘index’, 1 or ‘columns’} 0也表示按行填充,1也表示按列填充。必須和method配合使用。

【downcast】表示:dict, 預設是 None; 如果可能的話,把 item->dtype 的字典將嘗試向下轉換為適當的相等型別的字串(例如,如果可能的話,從float64到int64)【說實話,所有引數裡就這個沒看懂,網上也沒搜到例子。由於搜尋的時間成本太高,我先放棄這個引數了。downcast的英文看起來是向下轉型。】

【**kwargs】表示:*args大家都知道代表陣列, kwargs其實就是字典。這只是形參,真正有意義的是 兩個星號就代表字典。

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

大資料採集:fillna函式 5.fillna函式的全部例子

例子1:NaN值全替換為0

df.fillna(0) A B C D 0 0.0 2.0 0.0 0 1 3.0 4.0 0.0 1 2 0.0 0.0 0.0 5 3 0.0 3.0 0.0 4 例子2:向前或向後傳播

df.fillna(method='ffill')

Out[62]: A B C D 0 NaN 2.0 NaN 0 1 3.0 4.0 NaN 1 2 3.0 4.0 NaN 5 3 3.0 3.0 NaN 4

//和原來的對比,看看是不是用前面的值填上了後面的空白。

Out[60]: A B C D 0 NaN 2.0 NaN 0 1 3.0 4.0 NaN 1 2 NaN NaN NaN 5 3 NaN 3.0 NaN 4

例子3:用字典來替換每一列的空白值

values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}

df.fillna(value=values) Out[64]: A B C D 0 0.0 2.0 2.0 0 1 3.0 4.0 2.0 1 2 0.0 1.0 2.0 5 3 0.0 3.0 2.0 4

例子4:limit限定填充幾個空白值

df.fillna(value=values, limit=1)

//只替換第一個空白值 Out[65]: A B C D 0 0.0 2.0 2.0 0 1 3.0 4.0 NaN 1 2 NaN 1.0 NaN 5 3 NaN 3.0 NaN 4

例子5:axis屬性改變填充方向

df2.fillna(method="ffill", limit=1, axis=1)

//試了半天發現,不可以給一個字典,然後axis改變填充方向,那樣機器分析不出來要怎麼填,它會覺得你給的都是確定的,沒辦法改變填充方向。只有當你用method指定填充方法時,才可以改變填充方向。

執行結果

text

廉潔:h.................e................m..................a...........c.............o.............m


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69903461/viewspace-2654168/,如需轉載,請註明出處,否則將追究法律責任。

相關文章