Astropy Fits:如何写出一个切成行的表?

时间:2016-11-24 11:28:04

标签: python-3.x astropy fits

我目前正在使用一些拟合表,而我在Astropy.io.fits中输出时出现问题。基本上,我正在切出一堆行,这些行包含我不感兴趣的对象的数据,但是当我保存新表时,所有这些行都神奇地重新出现。

例如:

sudo locale-gen sk_SK.UTF-8
sudo dpkg-reconfigure locales

现在,我天真的头脑期待" hdu"有6行,hdu_sliced有4行,这是你使用np.size()时会得到的。因此,如果我保存hdu_sliced,新的拟合文件也将有4行:

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]

所以我用切片摆脱的那两行由于某种原因实际上并没有从表中删除,输出的文件与原始文件完全相同。

如何从表中删除我不想要的行,然后将新数据输出到新文件?

干杯, 阿什利

2 个答案:

答案 0 :(得分:4)

您可以使用astropy.table.Table代替astropy.io.fits.BinTable吗?

它是一个更友好的表格对象。

进行行选择的一种方法是使用所需行的列表(或数组)索引到表对象:

$result = DB::table('User as U')
        ->join('Registration_Update as RU', 'RU.user_id', '=', 'U.id')
        ->select('U.*', DB::raw("DATE_FORMAT(MAX(RU.created_at),'%m/%d/%Y %H:%i:%s') as lastRegistrationUpdate"))
        ->whereNull('RU.deleted_at')
        ->groupBy('U.id')
        ->get();

您可以使用>>> 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 直接读取和写入FITS:

Table

存在潜在问题,例如使用table = Table.read('file.fits', hdu='mydata') table2 = table[[2, 7, 10]] table2.write('file2.fits') 时,不会保留FITS BINTABLE标头,只有密钥值信息才会存储在Table中。您可以查看表格和FITS BINTABLE上的Astropy文档,了解有关两个表格对象的详细信息,它们如何表示数据或如何在两者之间进行转换,或者只是在此处或astropy-dev邮件列表中询问后续问题。 / p>

答案 1 :(得分:-1)

如果您想坚持使用print("⚜BaseHP = %-39d ⚜" % p1_basehp) etc. ,可以尝试以下操作,这似乎是一种解决方法:

FITS_rec