Python 3.x Astropy Fits:如何写出一张表,并将行切掉?
我目前正在使用一些fits表,在Astropy.io.fits中输出时遇到问题。从本质上讲,我是在切掉一堆包含我不感兴趣的对象数据的行,但是当我保存新表时,所有这些行都神奇地重新出现了 例如:Python 3.x Astropy Fits:如何写出一张表,并将行切掉?,python-3.x,astropy,fits,Python 3.x,Astropy,Fits,我目前正在使用一些fits表,在Astropy.io.fits中输出时遇到问题。从本质上讲,我是在切掉一堆包含我不感兴趣的对象数据的行,但是当我保存新表时,所有这些行都神奇地重新出现了 例如: import astropy.io.fits as fits import numpy as np hdu = fits.open('some_fits_file.fits')[1].data sample_slice = [True True True False False True] hdu_
import astropy.io.fits as fits
import numpy as np
hdu = fits.open('some_fits_file.fits')[1].data
sample_slice = [True True True False False True]
hdu_sliced = hdu[sample_slice]
现在,我天真的头脑期望“hdu”有6行,hdu_sliced有4行,这是使用np.size()时得到的结果。因此,如果保存hdu_切片,新的fits文件也将有4行:
new_hdu = fits.BinTableHDU.from_columns(fits.ColDefs(hdu_sliced.columns))
new_hdu.writeto('new_fits_file.fits')
np.size(hdu3)
6
因此,由于某种原因,我用切片去掉的这两行实际上没有从表中删除,并且输出的文件与原始文件相同
如何从表中删除不需要的行,然后将新数据输出到新文件
干杯,
艾希礼你能用它代替吗
这是一个更友好的桌面对象
进行行选择的一种方法是使用所需行的列表(或数组)索引到表对象中:
>>> from astropy.table import Table
>>> table = Table()
>>> table['col_a'] = [1, 2, 3]
>>> table['col_b'] = ['spam', 'ham', 'jam']
>>> print(table)
col_a col_b
----- -----
1 spam
2 ham
3 jam
>>> table[[0, 2]] # Table with rows 0 and 2 only, row 1 removed (a copy)
<Table length=2>
col_a col_b
int64 str4
----- -----
1 spam
3 jam
存在潜在问题,例如,在使用
表格
时,表格标题未被保留,只有键、值信息存储在表格.meta
中。您可以查阅Astropy docs on table and FITS BINTABLE,了解有关这两个表对象的详细信息,它们如何表示数据或如何在这两个表对象之间进行转换,或者在此处或Astropy dev邮件列表中询问后续问题。如果您想坚持使用FITS_rec
,您可以尝试以下方法:,这似乎是一个解决办法:
new_hdu = fits.BinTableHDU.from_columns(hdu_sliced._get_raw_data())
是
类型(hdu)=fits.fitsrec.fits\u rec
?是的,就是那种类型。看起来已经完成了!谢谢你,我不想重新设计我所有的代码来使用astropy.table。不要使用以下划线开头的方法,因为它们很容易改变。它们仅供内部使用。有更好的办法。
new_hdu = fits.BinTableHDU.from_columns(hdu_sliced._get_raw_data())