1

先輩から教えてもらったデータがあります。データは何千もの .fits ファイルで構成されています。一部の .fits ファイルは他のファイルの古いバージョンであり、データ テーブルの作成方法が異なります。これが私が意味することです:

FITS1.fits と FITS2.fits の 2 つの .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

ディクショナリ内のキーの順序に依存するコードを記述しないでください。ディクショナリはハッシュ テーブルであり、それらが格納される順序は本質的に任意です。エントリを照合または比較する必要がある場合は、キーのリストを取得して並べ替える必要があります。

キーが FITS ヘッダーに格納されている順序で pyfits がディクショナリを作成する可能性がありますが、必ずしもそうではありません。

于 2012-06-20T20:46:26.277 に答える