如何从匹配中进行排序 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 程序像 pandas
或 astropy.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.
我有一个 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 程序像 pandas
或 astropy.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.