我有一个形状为(115,2)的数组,每列有115个数字,第2列中的一些数字是NaN,如何使用numpy过滤这两列,以去除第2列中的NaN和第1列中相应的数字?
示例
array([[10., 10.],
[20., 13.],
[ 5., nan],
[ 6., nan]])
到
array([[10., 10.],
[20., 13.]])
我想过滤两列以排除第二列为NaN的值。我想保留形状,以便我可以对数字进行统计,如相关性。有什么想法吗?
如果我尝试~np.isnan,数组会失去形状,而我想保留它。请不要Pandas!
2条答案
按热度按时间ljo96ir51#
比如说,data 是你的numpy数组,那么new-data就是你的去掉NaN的numpy数组
wfveoks02#
那么
过滤行,但仅从布尔值的一维数组中过滤
我想当你说“我已经试过
~np.isnan
“时,你的意思是你已经试过arr[~np.isnan(arr)]
了。但是,由于arr
是2D的(形状为(115,2)),~na.isnan(arr)
也是,它是一个(115,2)形布尔数组。在这种情况下,从这样的数组中索引得到的是与True
匹配的arr
的所有值。(它怎么能保持原来的形状,因为你可能有不同数量的元素在两列)。另一方面,
~na.isnan(arr[:,1])
是一个1D(115,)布尔数组,用它索引只选择行。请参见使用布尔数组进行索引的示例