代码之家  ›  专栏  ›  技术社区  ›  Gabriel

在astropy表中删除具有遮罩元素的行

  •  3
  • Gabriel  · 技术社区  · 8 年前

    考虑 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() ,但这迫使我 熊猫 安装了我不想要的。

    2 回复  |  直到 8 年前
        1
  •  3
  •   rafaelc    8 年前

    一般来说

    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)]
    
        2
  •  1
  •   AGN Gazer    8 年前

    还有一种方法:

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

    但我同意你的观点,这种对无效值的过滤应该得到屏蔽表的支持。