如果数组在从pandas转换为numpy后包含nan,则删除'nan'或减少numpy数组的长度

时间:2017-02-22 09:30:55

标签: python arrays numpy

我想从numpy数组中删除nan。让我们说我的numpy数组包含:

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

预期产出:

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

如果我们使用pandas.dropna()在pandas中执行它,它会删除我不想做的整行。我只想删除该值并减小数组大小。

有没有办法可以这样做?

4 个答案:

答案 0 :(得分:1)

您不能使用np.isnan,因为NaN是数组中的字符串,但您可以通过与字符串"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')

答案 1 :(得分: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.])

答案 2 :(得分:0)

试试这个

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

它将从您的列表中删除nan

答案 3 :(得分:0)

这适用于数值数组。

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

>>>[1.0, 2.0, 3.0]