Python 移除numpy阵列中的NAN
我有两个包含NAN的numpy阵列:Python 移除numpy阵列中的NAN,python,arrays,numpy,nan,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删除两个数组中的NAN,并删除另一个列表中相应索引上的内容? 让它看起来像这样: A = array([ 2, 3, ]) B = array([ 2, 4, ]) 您可以将这两个数组添加到一起,这将用无的N
A = np.array([np.nan, 2, np.nan, 3, 4])
B = np.array([ 1 , 2, 3 , 4, np.nan])
是否有任何聪明的方法可以使用numpy删除两个数组中的NAN,并删除另一个列表中相应索引上的内容?
让它看起来像这样:
A = array([ 2, 3, ])
B = array([ 2, 4, ])
您可以将这两个数组添加到一起,这将用无的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.]
A[~(np.isnan(A)| np.isnan(B))]
B[~(np.isnan(A)| np.isnan(B))]
您也在使用熊猫吗?(有一种方法可以满足您对DataFrame
对象的需求)使用np。不过,
是完全多余的。@OliverW。嗯,是的,你是对的,我最初认为我需要整数索引,但是是的,这里没有必要,我会更新我的答案