2017-02-22 41 views
1

到numpy的後包含南。比方說,我numpy的數組包含:刪除「南」或減少numpy的陣列的長度,如果數組轉換從我想從numpy的數組中刪除<code>nan</code>大熊貓

np_array = ["123","pqr","123",nan,"avb", nan] 

預期輸出:

["123","pqr","123","avb"] 

如果我們使用pandas.dropna()它刪除整行,我不想做這樣做在大熊貓。我只想刪除該值並減小數組大小。

是否有任何可能的方式來做到這一點?

+1

這些建議的重複只適用於數組(所以這些不是真的重複)! – MSeifert

+0

我假設你不想刪除行嗎? – AsheKetchum

+0

你看過pandas.fillna()嗎?在一般情況下,如果行被認爲是觀察,我們會嘗試以節省整個行,不僅是行內刪除NaN值。 – AsheKetchum

回答

0

isnan()應該做的伎倆。工作如何做到這一點小例子:

>>> import numpy as np 
>>> np_array = np.array([1,2,3,np.nan,4]) 
>>> np_array 
array([ 1., 2., 3., nan, 4.]) 
>>> np_array = np_array[~np.isnan(np_array)] 
>>> np_array 
array([ 1., 2., 3., 4.]) 
+0

不起作用: 錯誤:*** TypeError:ufunc'isnan'不支持輸入類型和輸入c ting規則'安全'' 其dtype是對象 –

+0

檢查數組的'dtype' 。 'isnan'引發了對象數組的錯誤。如果沒有理由讓一個對象數組,你可以做'arr.dtype = np.float64'或任何你想要的,然後'isnan'會工作。如果你確實需要對象,請使用MSeifert的答案。 –

0

試試這個

np_clean = [x for x in np_array if str(x) != 'nan'] 

它會從列表中刪除楠

1

不能使用np.isnan因爲NaN s爲字符串中的array,但可以通過與字符串比較來使用布爾索引:"nan"

>>> import numpy as np 
>>> np_array = np.array(["123","pqr","123",np.nan,"avb", np.nan]) 
>>> np_array[np_array != 'nan'] 
array(['1234', 'pqr', '123', 'avb'], 
     dtype='<U4') 
0

這適用於數值數組。

filter(lambda x: np.isfinite(x), np.array([1,2,3,np.nan])) 

>>>[1.0, 2.0, 3.0]