要从Astropy Fits的BinTableHDU中删除行,可以使用以下代码示例:
from astropy.io import fits
# 打开FITS文件
hdul = fits.open('data.fits')
# 获取BinTableHDU
bintable_hdu = hdul[1]
# 删除行
rows_to_delete = [2, 5, 7] # 要删除的行的索引
bintable_hdu.data = fits.BinTableHDU.from_columns(bintable_hdu.data.columns, nrows=bintable_hdu.data.shape[0] - len(rows_to_delete))
for i, row_index in enumerate(rows_to_delete):
bintable_hdu.data[i:i+1] = bintable_hdu.data[row_index+1:row_index+2]
# 更新行数
bintable_hdu.header['NAXIS2'] = bintable_hdu.data.shape[0]
# 保存修改后的FITS文件
hdul.writeto('data_modified.fits', overwrite=True)
# 关闭FITS文件
hdul.close()
请将代码中的data.fits
替换为你的FITS文件的路径。在代码的第7行,你可以将rows_to_delete
列表更改为你要删除的行的索引列表。
这段代码打开FITS文件,并获取其中的BinTableHDU。然后,它通过重新创建一个新的BinTableHDU来删除指定的行。随后,代码更新BinTableHDU的行数,保存修改后的FITS文件,并关闭FITS文件。