删除numpy数组中的NaN

时间:2015-03-18 11:17:47

标签: python arrays numpy nan

我有两个包含NaN的numpy数组:

A = np.array([np.nan,   2,   np.nan,   3,   4])
B = np.array([   1  ,   2,     3   ,   4,  np.nan])

有没有聪明的方法使用numpy删除两个数组中的NaNs,还删除其他列表中相应索引的什么? 看起来像这样:

A = array([  2,   3, ])
B = array([  2,   4, ])

2 个答案:

答案 0 :(得分:8)

你可以做的是将2个数组加在一起,这将用NaN值覆盖,它们都是无,然后使用它生成一个布尔掩码索引,然后使用索引索引到你原来的numpy数组:

In [193]:

A = np.array([np.nan,   2,   np.nan,   3,   4])
B = np.array([   1  ,   2,     3   ,   4,  np.nan])
idx = np.where(~np.isnan(A+B))
idx
print(A[idx])
print(B[idx])
[ 2.  3.]
[ 2.  4.]

来自A+B的输出:

In [194]:

A+B
Out[194]:
array([ nan,   4.,  nan,   7.,  nan])

修改

正如@Oliver W.正确指出的那样,np.where是不必要的,因为np.isnan将产生一个布尔索引,可用于索引数组:

In [199]:

A = np.array([np.nan,   2,   np.nan,   3,   4])
B = np.array([   1  ,   2,     3   ,   4,  np.nan])
idx = (~np.isnan(A+B))
print(A[idx])
print(B[idx])
[ 2.  3.]
[ 2.  4.]

答案 1 :(得分:8)

A[~(np.isnan(A) | np.isnan(B))]

B[~(np.isnan(A) | np.isnan(B))]