微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

存在缺失值时,删除具有相同非缺失值的numpy数组列

如何解决存在缺失值时,删除具有相同非缺失值的numpy数组列

我有一个numpy数组,我需要从中删除非缺失单元格具有相同值的列,并删除所有值都缺失的列。 数组:

>>> x = np.array([[ 1.,2.,np.NaN,1.],[ 2.,1.,[np.NaN,[ 1.,0.],[ 0.,0.,2.],1.]])

>>> x
array([[ 1.,nan,[nan,1.]])

我可以删除缺少所有值的列(列索引3)

>>> x[:,~np.all(np.isnan(x),axis=0)]

array([[ 1.,1.]])

我可以删除所有行中具有相同值的所有列(列索引4)

>>> x[:,~np.all(x[1:] == x[:-1],1.]])

但是,如何删除非缺失值相同的第6列(索引5),但是缺失值的存在会导致布尔检查混乱?

编辑:所需结果

array([[ 1.,1.]])

解决方法

您可以使用按位运算符链接多个蒙版。您基本上需要两个口罩。

  • 一个NaNs
  • 检查第一行的值是否等于列的其余部分

然后用按位的OR链接两个条件,并检查all行是否满足条件:

m1 = np.isnan(x)
m2 = x[0] == x
x[:,~(m2|m).all(0)]

array([[ 1.,2.,1.],[ 2.,nan,1.,[nan,[ 1.,0.],[ 0.,0.,2.],1.]])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。