3

Let's assume I have a fits file with one extension, and the data consists of a table of two columns with 100 elements each

data = pyfits.open('path2myfile')[1].data
head = pyfits.open('path2myfile')[1].header
print data['field1'] # print an array with 100 elements
print data['field2'] # print another array with 100 elements

Now I want to add to my table a new column, let's say data['field3'], which is another array of 100 elements.

How exactly do I do that ?

4

2 回答 2

1

正如 Iguananaut 指出的那样,可以在这里找到答案:http://pyfits.readthedocs.org/en/latest/users_guide/users_table.html#merging-tables 只是将此问题标记为已回答:

cols = [] 
cols.append(
    pyfits.Column(name='field3', format='D', array= arrayContainingTheData)
    )
orig_cols = data.columns
new_cols = pyfits.ColDefs(cols)
hdu = pyfits.BinTableHDU.from_columns(orig_cols + new_cols)
hdu.writeto('newtable.fits')
于 2014-08-09T09:50:13.713 回答
0

@Cehem 的回答是正确的。但我只是想补充一点,Astropy 有一个更好的通用Table界面,您可能会发现它更易于使用(用于在其他用例中插入列)。

Astropy 在astropy.io.fits模块中整合了 PyFITS。但是由于您还可以访问更好的 Table 界面,您可以将大多数FITS 表读入 Astropy 表类,如下所示:

>>> from astropy.table import Table
>>> table = Table.read('path/to/fits_file.fits')

就是这样。您还可以将表写回 FITS 文件。诚然,这目前不支持所有类型的 FITS 表,但它将适用于大多数 - 以及未来的所有人。

于 2014-08-11T14:11:00.940 回答