在astropy表中删除带有蒙板元素的行

时间:2018-05-09 14:35:03

标签: python astropy

考虑astropy Table() object

from astropy.io import ascii

weather_data = """
  day,precip,type
  ,1.5,rain
  Tues, 9.,
  Wed,1.1,snow
  ed,,aaa
  Wd,1.1,snow
  """

dat = ascii.read(weather_data)
print(dat)

day  precip type
---- ------ ----
  --    1.5 rain
Tues    9.0   --
 Wed    1.1 snow
  ed     --  aaa
  Wd    1.1 snow

我需要删除包含至少一个蒙版元素的所有行。决赛桌应如下:

day  precip type
---- ------ ----
 Wed    1.1 snow
  Wd    1.1 snow

这似乎是一项简单的任务,但我无法在docs中找到方法。

添加

我知道我可以使用.to_pandas()将表格转换为pandas对象,然后使用类似.dropna()的内容,但这会迫使我安装pandas我不想要。

2 个答案:

答案 0 :(得分:3)

一般化的方式

import operator
# if python3: from functools import reduce
dat[reduce(operator.and_, [~dat[col].mask for col in dat.columns])]

day   precip type
str4 float64 str4
---- ------- ----
 Wed     1.1 snow
  Wd     1.1 snow

这个过程的作用只是一种普遍的做法

dat[(~dat['day'].mask) & (~dat['precip'].mask) & (~dat['type'].mask)]

答案 1 :(得分:1)

这是另一种方式:

dat.remove_rows(np.where([c.data for c in dat.mask.itercols()])[-1])

但我同意你的意见,这个无效值的过滤应该由一个蒙面表支持。