2017-02-22 51 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]