![](/img/trans.png)
[英]How to Use Pixel Coordinates with the imshow() command in order to make images from specific sections of a fits image in python?
[英]How to make a sort from a fits table python
我擁有一張適合身材的桌子。 我在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的fits界面功能最適合處理圖像數據,而不是表格格式。
Astropy表庫將對您有所幫助。 使用t = astropy.table.Table.read(fname)
(此外:該file
在Python中是保留的,因此應避免將其用作變量名)將允許您將FITS表作為Astropy表讀取,這樣可以很像一個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數組是更多的表,因此像pandas
或astropy.table
這樣的真實表程序可能會非常方便。
但是,如果您真的想將自己限制在from fits.open
獲得的表中(您不應該這樣做,因為recarray和結構化數組的行為與普通表操作有些不同),則可以使用文檔中給出的內容 :
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答案與表一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.