簡體   English   中英

如何從擬合表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數組是更多的表,因此像pandasastropy.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM