如何从匹配中进行排序 table python

How to make a sort from a fits table python

我有一个 table 适合的格式。我在 Python 中使用 astropy.io.fits 库。 我正在读取文件,我想打印我的数组条件。

例如,我想打印列 "CHI" > 值

的所有行
#!/usr/bin/python
# coding: utf-8

from astropy.io import fits
import numpy as np

        ##################################
        # Fichier contenant le champ 169 #
        ##################################

file = '/astromaster/home/xxxx/Bureau/Stage/Champs/Field_169/Field169_combined_final_roughcal.fits'

field169 = fits.open(file)          # Ouverture du fichier à l'aide d'astropy

tbdata = field169[1].data           # Lecture des données fits

#print tbdata['CHI']
#print tbdata[tbdata['CHI'] < 1.0]

for row in tbdata :
    if tbdata['CHI'] < 1.0 :
        print row

而且,如何在新打印的数组中添加一两个条件?

谢谢!

Astropy 的适合界面功能最适合处理图像数据,而不是表格数据。

Astropy tables 图书馆会对您有所帮助。使用 t = astropy.table.Table.read(fname)(另外:file 在 Python 中保留,因此您应该避免将其用作变量名)将允许您将 FITS table 作为 Astropy 读入table,它的工作方式很像 numpy 记录数组。

然后您可以根据列值进行过滤,例如:print t[t['CHI'] < 1.](如果您不熟悉 numpy,您可以多读一些关于屏蔽和元素选择的内容,因为这与 numpy 的基本相同功能——如果你不熟悉,我想读一下上面的语句“t 使得 t['CHI'] 小于 1。”)

您也可以组合条件:print t[(t['A'] < 1) & (t['B'] > 2)]。完成后,您可以使用 t.write(fname2)

写出

首先,这与您的问题无关:如果您打开任何文件,您应该之后再次关闭它或将其用作上下文管理器。我通常更喜欢上下文管理器:

filename = '...'
with fits.open(filename) as field169:
    tbdata = field169[1].data
... continue without indentation after you have finished with the file.

之后你有一个记录的 numpy 数组,你可以使用它但是由于结构化的 numpy 数组更多 tables 一个真正的 table 程序像 pandasastropy.table 可能很方便。

但是如果你真的想把自己限制在 table 你会得到 from fits.open (你不应该因为 recarray 和结构化数组的行为与正常 table操作)您可以使用 documentation:

中给出的内容
mask = tbdata['CHI'] < 1.0
tbdata[mask]

或者,如果您想要多个条件,只需将它们添加到 &(如果两者都应适用)或 |(如果至少一个条件应适用):

mask = tbdata['CHI'] < 1.0 & tbdata['CHI'] > 0.5
tbdata[mask]

mask = tbdata['CHI'] < 1.0 | tbdata['OTHER'] > 0.5
tbdata[mask]

希望对您有所帮助。但可能你最好使用@DathosPachy answer with tables.