1

我的导师给了我一些数据。数据由数千个 .fits 文件组成。一些 .fits 文件是其他文件的旧版本,并且数据表的构建方式也不同。这就是我的意思:

假设我有两个 .fits 文件:FITS1.fits 和 FITS2.fits

$ python
>>> import pyfits
>>> a = pyfits.getdata('FITS1.fits')
>>> b = pyfits.getdata('FITS2.fits')
>>> a.names
['time', 'timeerr', 'sap_flux', 'sap_flux_err']
>>> b.names
['time', 'sap_flux', 'timeerr', 'sap_flux_err']

有谁知道我可以切换数据表中的列的方法?所以 FITS2.fits 的格式类似于 FITS1.fits ?

4

2 回答 2

1

你最好的选择是不直接使用 pyfits,而是使用更新的、更闪亮的 Astropy Table界面。您可以阅读 FITS 表,例如:

from astropy.table import Table
table = Table.read('FITS1.fits')

修改表部分所示,您可以重新排列列,如:

table = table[['time', 'timeerr', 'sap_flux', 'sap_flux_err']]

(从技术上讲,这会创建一个表的新副本,并按照您希望它们所在的顺序选择列;但是 IIRC 这不会复制基础列数组,并且应该仍然是一个快速操作)。

使用旧的 pyfits 接口也完全可以做到这一点,但在大多数情况下我不推荐它。

于 2015-01-27T16:34:36.153 回答
-1

你不应该编写依赖于字典中键顺序的代码——字典是一个哈希表,它们的存储顺序基本上是任意的。如果您需要匹配或比较条目,您应该获得一个键列表并对它们进行排序。

pyfits 很可能按照键存储在 FITS 标头中的顺序构建字典,但这不一定是真的。

于 2012-06-20T20:46:26.277 回答