我的导师给了我一些数据。数据包含数千个.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?
答案 0 :(得分:1)
最好的办法是不要直接使用pyfits,而是使用更新,更光亮的Astropy Table界面。您可以在FITS表中阅读,如:
from astropy.table import Table
table = Table.read('FITS1.fits')
如modifying tables部分所示,您可以对列进行重新排序,如:
table = table[['time', 'timeerr', 'sap_flux', 'sap_flux_err']]
(从技术上讲,这会创建表的新副本,并按照您希望它们的顺序选择列;但是IIRC不会复制基础列数组,并且应该仍然是快速操作。)
使用旧版pyfits界面完成此操作也是完全可能的,但在大多数情况下我都不建议这样做。
答案 1 :(得分:-1)
你不应该编写依赖于字典中键的顺序的代码 - 字典是一个哈希表,它们存储的顺序必然是任意的。 如果您需要匹配或比较条目,您应该获得密钥列表并对其进行排序。
pyfits很可能按照密钥存储在FITS标头中的顺序构建字典,但这不一定正确。