統一ファイル読み書きインタフェース

astropy 異なるフォーマットのデータを読み書きするための統一されたインターフェースを提供する。多くの一般的な場合、これは、ファイルI/Oプロセスを簡略化し、すべてのI/Oパケットの個々の詳細情報を把握する必要を低減する。 astropy それがそうです。実現の詳細については,参照のこと I/Oレジストリ (astropy.io.registry ) それがそうです。

イメージI/O入門

統一I/Oインタフェースでの画像データの読み書きをサポート CCDData FITSファイルフォーマットを使用して初期化:

>>> # Read CCD image
>>> ccd = CCDData.read('image.fits')
>>> # Write back CCD image
>>> ccd.write('new_image.fits')

なお、このユニットは BUNIT 保存時にタイトル中のキーワードは、タイトル中にそのキーワードが存在すれば、タイトルからそのキーワードを読み取る。

読み出しや書き込みに利用可能なキーワードパラメータの詳細な支援については,通過可能である. help() 方法は以下のとおりである.

>>> CCDData.read.help('fits')  # Get help on the CCDData FITS reader
>>> CCDData.writer.help('fits')  # Get help on the CCDData FITS writer

表I/O入門

♪the Table クラスには2つの方法があります read() そして write() これにより、ファイルの読み出しおよび書き込みが可能となる。様々なフォーマットが自動的にサポートされています(参照 Built-in table readers/writers )、新しいファイルフォーマットおよび拡張子を登録することができます Table 類(参照) I/Oレジストリ (astropy.io.registry ) )。

実例.

このインタフェースをご利用の場合は、まず導入してください Table クラス、そして呼び出します Table read() 方法、例えば、ファイル名およびファイルフォーマットを使用する 'ascii.daophot'

>>> from astropy.table import Table
>>> t = Table.read('photometry.dat', format='ascii.daophot')

URLを使用してInternetからテーブルを直接ロードすることができます。例えば、CDSフォーマットのテーブルは、Vizierディレクトリからダウンロードされる。 ('ascii.cds' ):

>>> t = Table.read("ftp://cdsarc.u-strasbg.fr/pub/cats/VII/253/snrs.dat",
...         readme="ftp://cdsarc.u-strasbg.fr/pub/cats/VII/253/ReadMe",
...         format="ascii.cds")  

いくつかのファイルフォーマットの場合、フォーマットを自動的に検出することができ、例えば、ファイル拡張子:

>>> t = Table.read('table.tex')  

ライトテーブルの場合、フォーマットを明示的に指定することができる:

>>> t.write(filename, format='latex')  

そこまでは read() 方法は、場合によってはフォーマットを自動的に識別することができる。

下位ファイル処理プログラムはまた、様々な圧縮データフォーマットを自動的に検出し、Pythonインストールサポートの範囲で透明に解凍します(参照 get_readable_fileobj() )。

作成については、関係を指定することもできます Table serialization methods 通過する. serialize_method キーワードパラメータ。これは、例えば、ISOフォーマットの時間列を、一対のJD 1/JD 2浮動小数点値(フル解像度のために)またはフォーマットされたISO日付文字列として書くなど、いくつかの列が書かれる方法を細かく制御することを可能にする。

読者や著者の助けを得る

各ファイルフォーマットは、特定のリーダまたはライタによって処理され、各関数は、自身のパラメータのセットを有する。この点の例については小節を参照されたい Built-in table readers/writers それがそうです。本節では,以下のオプションの完全リストも提供する format 論争する。

各フォーマットに関する利用可能なパラメータを取得するための助けは、ご利用ください help() 方法 read あるいは…。 write 方法:研究方法。各呼び出しは、汎用的な読み書き文書(どの呼び出しも共通)とフォーマット固有の文書との2つの部分に分割された長いヘルプ文書を印刷する。ASCII表では,フォーマット固有の文書には汎用が含まれている astropy.io.ascii パケットインターフェースは、次いで、特定のASCIIサブフォーマットを記述する。

以下の例では、長い出力は表示されていない。

>>> Table.read.help('fits')
>>> Table.read.help('ascii')
>>> Table.read.help('ascii.latex')
>>> Table.write.help('hdf5')
>>> Table.write.help('csv')

命令行ユーティリティ

便宜のために道具を命令する showtable 統一I/Oインタフェースによってサポートされるフォーマットのフォーム内容を印刷するために使用することができる。

例を引く

コマンドラインで表の内容を見るには、以下の操作を実行してください。

$ showtable astropy/io/fits/tests/data/table.fits

 target V_mag
------- -----
NGC1001  11.1
NGC1002  12.3
NGC1003  15.2

用法や利用可能なオプションに関する完全文書を取得するには、以下の操作を実行してください showtable --help それがそうです。

表リーダ/ライタを内蔵する

The Table class has built-in support for various input and output formats including ASCII形式, -FITS, HDF 5, ジャイアントパンダ., and VO表.

次の表にサポートされているフォーマットと対応するクラスの完全リストを示す.♪the Write 列は書き込み機能をサポートするフォーマットを示します Suffix 列は、特定のフォーマットを示すファイル名接尾辞を示します。もし…。 Suffix はい。 auto すると,ファイル自体からそのフォーマットが自動的に検出される.すべてのフォーマットが自動検出をサポートしているわけではない。

格式.

書く.

接尾辞

説明する.

アズ!

はい、そうです。

サポートされているフォーマットのASCII表(推測を使用)

ascii.aastex

はい、そうです。

AASTex :AASジャーナル用AASTeX豪華フォーム

ascii.basic

はい、そうです。

Basic :カスタム区切り付き基本表

ascii.cds

違います。

Cds :CDSフォーマット表

ascii.commented_header

はい、そうです。

CommentedHeader :注釈行中の列名

ascii.csv

はい、そうです。

.csv

Csv :コンマ区切り値付き基本表

ascii.daophot

違います。

Daophot :iraf DAOphotフォーマット表

ascii.ecsv

はい、そうです。

.ecsv

Ecsv :拡張CSV基本テーブル(メタデータをサポート)

ascii.fixed_width

はい、そうです。

FixedWidth :固定幅

ascii.fixed_width_no_header

はい、そうです。

FixedWidthNoHeader :幅を固定し、眉を持たない

ascii.fixed_width_two_line

はい、そうです。

FixedWidthTwoLine :2番目の見出し行の固定幅

ascii.html

はい、そうです。

html

HTML :HTMLフォーム

ascii.ipac

はい、そうです。

Ipac :IPACフォーマット表

ascii.latex

はい、そうです。

.tex

Latex :ラテックステーブル

ascii.no_header

はい、そうです。

NoHeader :裏表のない基本表

ascii.rdb

はい、そうです。

.rdb

Rdb :タブ,タイトル行区切りをタイプで定義する

ascii.rst

はい、そうです。

.rst

RST :reStructiredTextシンプルなフォーマット表

ascii.sextractor

違います。

SExtractor :SExtractor格式表

ascii.tab

はい、そうです。

Tab :タブ区切り値付き基本表

コンビネーション

はい、そうです。

自動的に

fits :柔軟な画像転送システムファイル

HDF 5

はい、そうです。

自動的に

HDF 5:階層データフォーマットバイナリファイル

pandas.csv

はい、そうです。

周囲の包装紙 pandas.read_csv() そして pandas.to_csv()

pandas.fwf

違います。

周囲の包装紙 pandas.read_fwf() (固定幅フォーマット)

pandas.html

はい、そうです。

周囲の包装紙 pandas.read_html() そして pandas.to_html()

pandas.json

はい、そうです。

周囲の包装紙 pandas.read_json() そして pandas.to_json()

投票可能な

はい、そうです。

自動的に

votable :仮想天文台(VO)計画で使用されるフォーム形式

ASCII形式

♪the read() そして write() 方法は、読み取りおよび書き込みに使用することができます astropy.io.ascii それがそうです。

使用 format='ascii' 汎型に接続するために read() そして write() 関数は astropy.io.ascii それがそうです。表を読み取る際には,入力の解析に成功するために,サポートするASCII表形式をすべて試みることを意味する.

実例.

サポートされているフォーマットの読み込みと書き込みは、以下の操作を実行してください astropy.io.ascii

>>> t = Table.read('astropy/io/ascii/tests/t/latex1.tex', format='ascii')
>>> print(t)
cola colb colc
---- ---- ----
   a    1    2
   b    3    4

表を作成する際に format='ascii' 出力は基本的な文字区切りファイルであり,1つの見出し行のみが列名を含む.

すべての追加パラメータは astropy.io.ascii read() そして write() 機能します。詳細についてはご参照ください パラメータ read() そして パラメータ write() それがそうです。たとえば,列デリミタの和を変更する場合 colc 列使用:

>>> t.write(sys.stdout, format='ascii', delimiter='|', formats={'colc': '%0.2f'})
cola|colb|colc
a|1|2.00
b|3|4.00

注釈

統一インタフェースを用いてASCII表フォーマットを指定する場合,フォーマット名はプレフィックスとなる. ascii このフォーマットをASCIIベースのフォーマットとして識別するために。上の表と astropy.io.ascii 明細書. supported formats プレフィックスは不要である.したがって,以下は等価である.

  >>> dat = ascii.read('file.dat', format='daophot')
  >>> dat = Table.read('file.dat', format='ascii.daophot')

For compatibility with ``astropy`` version 0.2 and earlier, the following
format values are also allowed in ``Table.read()``: ``daophot``, ``ipac``,
``html``, ``latex``, and ``rdb``.

注意

ECSVのご利用がおすすめです

表データ,タイプ,メタデータを完全に複製するように表をASCIIに書き込む(すなわち,表は“往復”する),利用を強く提案する. ECSVフォーマット それがそうです。これは、スペースで区切られた形式で実際のデータに書き込まれます( basic フォーマット)は、どのASCIIテーブルリーダも解析可能であるが、ソース列を完全に再構成することを可能にする注釈ブロックにおいて符号化されたメタデータも含む。これには支援も含まれています 混合柱 (例えば、 SkyCoord あるいは…。 Time )と 遮蔽柱. それがそうです。

FITS

中で読んで記入表を書く FITS サポートのフォーマット format='fits' それがそうです。多くの場合,ファイルヘッダから既存のFITSファイルを自動的に認識すべきであるが,そうでなければ,ディスクに書き込む場合にはフォーマットを明示的に指定すべきである.

本を読む

FITSフォームファイルが単一のフォームのみを含む場合、以下のコマンドを使用してフォームを読み出すことができる。

>>> from astropy.table import Table
>>> t = Table.read('data.fits')

ファイルに複数のテーブルが存在する場合、以下のようにHDUを選択することができます。

>>> t = Table.read('data.fits', hdu=3)  

この場合もし hdu パラメータが省略されると、見つかった最初のテーブルが読み出され、警告が発せられる:

>>> t = Table.read('data.fits')  
WARNING: hdu= was not specified but multiple tables are present, reading in first available table (hdu=1) [astropy.io.fits.connect]

メモリ内のFITSファイルのHDUからテーブルを読み取ることもできます。これは何でも往復します 混合柱 HDUに書き込まれ、ヘッダ情報を使用して再構成される:

>>> hdulist = astropy.io.fits.open('data.fits') 
>>> t = Table.read(hdulist[1])  

文章を書く

表を書くには、以下の操作を実行してください t 新しいファイルに追加:

>>> t.write('new_table.fits')  

ファイルがすでに存在していて、それをカバーしたい場合は、 overwrite キーワード:

>>> t.write('existing_table.fits', overwrite=True)  

既存のファイルに表を追加する場合は、 append キーワード:

>>> t.write('existing_table.fits', append=True)  

あるいは、便利な機能もご利用いただけます table_to_hdu() 単一のバイナリテーブルHDUを作成し、既存のものに挿入または追加する HDUList それがそうです。

自分から. astropy バージョン3.0では、以下を含むテーブルの書き込みをサポート 混合柱 例えば Time あるいは…。 SkyCoord それがそうです。この使用配合 COMMENT FITSからの読み出し時に混合列を完全に再構成するために必要な付加情報を取り込むためのカード.この情報はPythonです dict アーキテクチャは,YAMLを用いて直列化される.

キーワード

HDU表に関連するFITキーワードは meta 対象の秩序辞書属性 Table それがそうです。表を読んだ後、以下のコマンドを使用して、利用可能なキーワードを読み取り可能なフォーマットで表示することができます。

>>> for key, value in t.meta.items():
...     print(f'{key} = {value}')

This does not include the "internal" FITS keywords that are required to specify the FITS table properties (e.g., NAXIS, TTYPE1). HISTORY and COMMENT keywords are treated specially and are returned as a list of values.

逆に,表にユーザキー値を設定した例を以下に示す. t

>>> t.meta['MY_KEYWD'] = 'my value'
>>> t.meta['COMMENT'] = ['First comment', 'Second comment', 'etc']
>>> t.write('my_table.fits', overwrite=True)

キーワード名(例えば、 MY_KEYWD )は、書き込む前に自動的に大文字になります。

この時には meta 属性の属性。 Table クラスは順序辞書であり,FITSヘッダの構造を完全に表すわけではない(たとえば,キーワードアノテーションを削除する).

TDISPnキーワード

TDISPn FITSキーワードは Column format 表示フォーマットがPython表示フォーマットと相互に変換できる場合。次は2つの方向転換のためのルールである.

TDISPn転送Python形式文字列

TDISPnフォーマット文字は次の表で定義する.

格式.

説明する.

アウェイ!

性格

LW

論理的な

Iw.m

整型.

Bw.m

バイナリ、整数に限られています

Ow.m

8進制は整数に限られている

Zw.m

16進制で、整数に限られています

Fw.d

浮き点·固定小数記法

Ew.dEe

浮動小数点·指数表現法

ENw.d

工程.指数倍数3のEフォーマット

ESw.d

科学的である;ENと同じであるが、ゼロでなければ、ゼロのプリアンブルではない

Gw.dEe

一般に,重要度が失われていなければF,Eと表示される

Dw.dEe

浮動小数点、指数表現法、倍精度

ここでwは値を示す文字幅,mは表示の最小桁,dは小数の右辺の桁,eは指数中の桁である..mフィールドおよびEEフィールドは任意である。

A(文字)、L(論理)、F(浮動小数点)、G(通常)表示フォーマットは、Python形式の文字列に直接変換することができます。他のフォーマットはPython表示フォーマットに一致するように修正する必要があります。

整数フォーマット(I、B、O、Z)の場合、幅(W)値は、列値の左側にスペースパッドを追加するために使用される。最小数字(M)の値は用いない.E,G,D,ENとESフォーマット(浮動小数点指数)については,幅(W)と精度(D)を併用するが,指数(E)は用いない.

Python形式文字列をTDISPnに変換する

Python形式文字列からTDISPnに戻すのは少し複雑です。

Python形式文字列に右スペースパッドが含まれていない場合、Python文字列はTDISPフォーマットAにマッピングされます。それは左側のスペース充填を受けるだろう。これは論理フォーマットLにも同様に適用される.

整数フォーマット(10進整数、バイナリ、8進、16進数)は、それぞれI、B、O、およびZ TDISPフォーマットにマッピングされる。整数フォーマットは、ゼロ記入されたフォーマット文字列または左パディングを定義していないフォーマット文字列(整数フォーマットのTDISPフォーマット標準要件幅)を受け入れない。

すべての浮動小数点値と指数値については,ゼロパディングは受け付けない.少なくとも幅や精度を定義しなければならない.幅のみを定義すれば,TDISPnフォーマットに精度を設定することはない.精度のみを定義すれば,幅はフォーマットタイプに応じて精度に追加のパディング値を加え,両者ともTDISPn形式で設定する.そうでなければ,幅と精度がともに存在すれば,TDISPnフォーマットに設定する.1本の巨漢. f あるいは…。 F TDISP F形式にマッピングします。巨漢. g あるいは…。 G TDISP G形式にマッピングします。巨漢. e そして E TDISP E形式にマッピングします。

遮蔽柱.

以下を含む表 MaskedColumn 列は適切な位置に書き込むことができる.デフォルトの場合、これは、FITS規格に従ってマスクされたデータ要素を特定の前哨値に置き換える:

  • NaN 浮動柱に使います。

  • の価値 TNULLn 全型列については,列で定義される. fill_value 属性です。

  • 文字列の空文字列(現在実現されていない)

ファイルを読み返す際には、これらの要素は戻りテーブルにマスクと表記されていますが、参照されたい issue #4708 3つのケースのすべての問題です

FITS規格にはいくつかの制限がある。

  • すべてのデータタイプがサポートされているわけではない(例えば、論理/ブール型)。

  • 整数列は、NULLインジケータとして1つの値を選択する必要がある。すべての可能な値が有効データで表される場合(例えば、全256個の可能な値を有効データに含む符号なし整数列)である場合、失われたデータを表すことができない。

  • マスクされたデータ値は永久的に失われ,後でこれらの値をマスクする可能性は排除される.

astropy ユーザが使用を選択することができるこの制限を解決する方法を提供する。重要なのは serialize_method='data_mask' 表を書く際のキーワードパラメータ。これはFITSコンパイラが各マスク列を2つの別個の列に分割し,1つをデータ,もう1つをマスクに分割することを伝える.それが読み取られると、プロセスは逆になり、2つの列は1つのシールド列に統合される。

>>> from astropy.table.table_helpers import simple_table
>>> t = simple_table(masked=True)
>>> t['d'] = [False, False, True]
>>> t['d'].mask = [True, False, False]
>>> t
<Table masked=True length=3>
  a      b     c     d
int64 float64 str1  bool
----- ------- ---- -----
   --     1.0    c    --
    2     2.0   -- False
    3      --    e  True
>>> t.write('data.fits', serialize_method='data_mask', overwrite=True)
>>> Table.read('data.fits')
<Table masked=True length=3>
  a      b      c      d
int64 float64 bytes1  bool
----- ------- ------ -----
   --     1.0      c    --
    2     2.0     -- False
    3      --      e  True

警告

このオプションは、失われたデータを表すための既定のFITS規格を超えているので、ユーザは、特に他の(Asterpy´‘)ユーザがファイルを読み取る場合には、特に気をつけなければならない。舞台裏では ``astropy マスク列は、2つの異なるデータ列およびマスク列に変換され、その後、メタデータが書き込まれる。 COMMENT カードは元のデータを再構成することができます。

astropy ネイティブオブジェクト(Mixin列)

It is possible to store not only standard Column objects to a FITS table HDU, but also any astropy native objects (混合柱) within a Table or QTable. This includes Time, Quantity, SkyCoord, and many others.

一般に、MIXIN列は、複数のデータコンポーネントおよび標準列属性以外のオブジェクト属性を含むことができる。 format あるいは…。 description それがそうです。FITS規格で設定されたルールを遵守するには,これらのデータコンポーネントとオブジェクト属性を適切なFITSテーブル列とキーワードにマッピングする必要がある.そこで、オブジェクトがデータや属性を失うことなくファイル内で“往復”することを可能にしながら、これらの混合列を適切に格納することを可能にするために、良好な定義プロトコルが開発されている。

A Quantity 中のMixin列 QTable FITS表で使用する TUNITn マッチング列キーワードは,数を含む単位属性である.例えば:

>>> from astropy.table import QTable
>>> import astropy.units as u
>>> t = QTable([[1, 2] * u.angstrom)])
>>> t.write('my_table.fits', overwrite=True)
>>> qt = QTable.read('my_table.fits')
>>> qt
<QTable length=2>
  col0
Angstrom
float64
--------
     1.0
     2.0
時間です。

astropy 以下の読み書き機能を提供する Time

  • 書くことと読むこと Time FITSテーブルに対応するテーブル列.

  • FITSテーブル中の時間座標列(時間基準を満たす)を読み込む. Time 表の列です。

書くことと読むこと astropy 時間欄.

デフォルトの場合、1つは Time 中のMixin列 Table あるいは…。 QTable 完全に正確なサイズに書かれますこれは,FITS時間基準を用いて必要なFITSヘッダキーワードを設定することで行われる.

FITフォームを読み込み Table 歴史的にはすべての配合列を Column オブジェクト,これらのオブジェクトは非常にマッチする属性を持つ.しかし,ある列に対してCloser Nativeは astropy 表示は可能で、あなたは伝達することができます astropy_native=True (後方互換性のため、デフォルトではこの動作は実行されません)。これはFITS時間基準を満たす列を変換する. Time 事例は,任意の精度損失を回避する.

例を引く

適切なテーブルを読み込むには、以下の操作を実行してください Table

>>> from astropy.time import Time
>>> from astropy.table import Table
>>> from astropy.coordinates import EarthLocation
>>> t = Table()
>>> t['a'] = Time([100.0, 200.0], scale='tt', format='mjd',
...               location=EarthLocation(-2446354, 4237210, 4077985, unit='m'))
>>> t.write('my_table.fits', overwrite=True)
>>> tm = Table.read('my_table.fits', astropy_native=True)
>>> tm['a']
<Time object: scale='tt' format='jd' value=[ 2400100.5  2400200.5]>
>>> tm['a'].location
<EarthLocation (-2446354.,  4237210.,  4077985.) m>
>>> all(tm['a'] == t['a'])
True

同様の方法は QTable それがそうです。

In addition to binary table columns, various global time informational FITS keywords are treated specially with astropy_native=True. In particular, the keywords DATE, DATE-* (ISO 8601 datetime strings), and the MJD-* (MJD date values) will be returned as Time objects in the Table meta. For more details regarding the FITS time paper and the implementation, refer to 表を時間列に合わせる.

すべてのFITSリーダがFITS時間基準を使用できるわけではないため,格納も可能である. Time instances using the _ time_format `. For this case, none of the special header keywords associated with the FITS time standard will be set. When reading this back into ``astropy`, the column will be an ordinary Column instead of a Time object. See the Details 以下の節で一例を示す.

バイナリテーブルに適合する標準を満たす時間座標列を読み取る.

FITS時間規格に準拠したFITSファイルの読み込みをサポート astropy 標準的に規定された様々な規則と慣行に従う。この基準は,時間座標を明確かつ網羅的に記述し,その複数の用例に柔軟性を提供するために設計されている.したがって,FITSに該当するファイル中の時間座標列を読み込む際には,基準の複数の側面を考慮する必要がある.

時間座標列厳密に基準を満たす二重ベクトルJdサブセット(ここで Details 部分)は自機と捉えることができる Time 物体です。この標準の他のサブセットもサポートされています astropy FITS標準時間に関するキーワードを徹底的にチェックし,それに応じて時間データを解釈する.

この基準は、時間仕様における様々な構成要素を記述する。

  • 時間座標フレーム

  • 時間単位.

  • 訂正、誤りなど。

  • 期間

時間を指定するためのキーワードは,これらのコンポーネントを定義する.これらのキーワードを用いて、時間座標列が識別されて読み取られる Time 物体です。参考までに 表を時間列に合わせる これらのキーワードの説明とその説明については参照されたい.

この基準には、それらを処理する際に微妙な点が関連しているので、特に注意が必要な2つの側面がある。これらは

  • Time(時間単位付き)という列

既存のFITSファイルの一般的な約束の1つは、FITSバイナリテーブル列である TTYPEn = ‘TIME’ 時間座標列を表す.多くの天文データファイルは、主要天文台の公式データ製品を含め、この朝FITS標準の約束に従っている。FITS時間基準は、そのような列がグローバル時間参照フレームキーワードによって制御され、これが依然として本規格に適合することを規定する。

この基準に組み込まれた約束を使用して astropy このようなFITテーブルのすべての時間座標列をネイティブとして読み取ることができます Time 物体です。この約束に従ったFITファイルの一般的な例は、Chandra、XMM、およびHSTファイルである。

実例.

以下にChandraイベントリストのタイトル抽出例を示す.

COMMENT      ---------- Globally valid key words ----------------
DATE    = '2016-01-27T12:34:24' / Date and time of file creation
TIMESYS = 'TT      '           / Time system
MJDREF  =  5.0814000000000E+04 / [d] MJD zero point for times
TIMEUNIT= 's       '           / Time unit
TIMEREF = 'LOCAL   '           / Time reference (barycenter/local)

COMMENT      ---------- Time Column -----------------------
TTYPE1  = 'time    '           / S/C TT corresponding to mid-exposure
TFORM1  = '1D      '           / format of field
TUNIT1  = 's       '

When reading such a FITS table with astropy_native=True, astropy checks whether the name of a column is "TIME"/ "time" (TTYPEn = ‘TIME’) and whether its unit is a FITS recognized time unit (TUNITn is a time unit).

例えば、上述したタイトルおよび時間座標列を有するChandraイベントリストを読み出す time として [1, 2] 与えられます:

>>> from astropy.table import Table
>>> from astropy.time import Time, TimeDelta
>>> from astropy.utils.data import get_pkg_data_filename
>>> chandra_events = get_pkg_data_filename('data/chandra_time.fits',
...                                        package='astropy.io.fits.tests')
>>> native = Table.read(chandra_events, astropy_native=True)  
>>> native['time']  
<Time object: scale='tt' format='mjd' value=[57413.76033393 57413.76033393]>
>>> non_native = Table.read(chandra_events)
>>> # MJDREF  =  5.0814000000000E+04, TIMESYS = 'TT'
>>> ref_time = Time(non_native.meta['MJDREF'], format='mjd',
...                 scale=non_native.meta['TIMESYS'].lower())
>>> # TTYPE1  = 'time', TUNIT1 = 's'
>>> delta_time = TimeDelta(non_native['time'])
>>> all(ref_time + delta_time == native['time'])
True

デフォルトの場合、FITテーブル列は標準として読み出されます。 Column 対象は,FITS時間基準を考慮しない.

  • ISO 8601日時フォーマットの文字列時間列

Date−xxxのようないくつかの時間関連キーワードの場合、FITSは、ISO 8601のサブセット(それ自体が特定の時間スケールを意味するわけではない)を使用する。FITS規格では,その値は文字列の形で以下のものを記入しなければならない datetime フォーマット:

[+/-C]CCYY-MM-DD[Thh:mm:ss[.s...]]

この時間表現法を用いて時間座標列を構築することができる.以下にISO 8601の例を示す datetime フォーマット時間列:

TIME
----
1999-01-01T00:00:00
1999-01-01T00:00:40
1999-01-01T00:01:06
.
.
.
1999-01-20T01:10:00

ISO 8601フォーマットの時間座標列を識別する基準は以下のとおりである。

上述したように、時間座標フレームキーワードを用いて時間列を識別する 表を時間列に合わせる それがそうです。それが識別されると、その表示フォーマットを決定するために、そのデータタイプがチェックされる。ISO 8601以来 datetime フォーマットは時間的に一意の文字列表現形式であり、文字列データタイプを有する時間座標列は自動的に読み出される Time 以下の内容を持つ対象 format='fits' (‘FITS’はFITS ISO 8601形式を表す)。

このフォーマットは、特定の時間スケールを暗黙的に含まないため、タイトル内の時間スケールキーワードを使用して決定される。 (TCTYP あるいは…。 TIMESYS )またはデフォルト値。時間座標フレームキーワードを用いて他の時間座標情報も同様に決定する。すべてのISO 8601時間は、全世界で公認されている零点(年0は紀元前1 BCEに対応する)に対して、参照時間キーワード(MJDREF、JDREFまたはDATEREF)とは無関係である。したがって、ISO 8601タイム列を処理する際には、これらのキーワードは無視される。

注釈

時間座標列に適したファイルを読み込む may 失敗しました。 astropy これらのファイルのサブセットの大部分はサポートされているが、いくつかのFITSファイルは、この規格のいかなる態様にも適合していない。もしあなたがこのような書類を持っていたら、迷わず私たちに知らせてください(開くことで issue tracker )。

また読書は TTYPEn = ‘TIME’ として Time 以下の場合には失敗する TUNITn この列は認識に適した時間単位ではないからである.

細かい点

時間は天文データの1つの次元としてFITSファイルにおける表示に挑戦している.したがって、この基準は厳格な説明に拡張された。 World Coordinate System フレームワーク。参考までに FITS WCS paper IV もっと細かいことを知っています。

許す Time したがって,FITSテーブルに時間座標列として書き込む列は,保持精度を確保するように時間値を格納し,関連するメタデータを関連するFITSキーワードにマッピングすることに関連する.

この基準によれば(この基準はバイナリテーブルでペアのダブルスを使用できることに規定されている)。 astropy このような表には,時間列が2つの倍精度ベクトルの形で書き込まれている (TFORMn = ‘2D’) (jd1, jd2) どこだ? JD = jd1 + jd2 それがそうです。これは、時間値を倍精度にコピーし、“非破壊”バージョンであり、バイナリテーブルが提供するより高い精度を利用する。注意してください jd1 常に半整数または整数であり、 abs(jd2) < 1 それがそうです。“往復”です astropy -時間座標列を含む書き込みされたFITバイナリテーブルは、選択されたメタデータをマッピングすることによって部分的に実現されている。 scale 和単数 locationTime 対応するキーワードに追加します。中で許可されている任意のメタデータに注意してください Table 対象中の対象 meta 辞書は書面ではないので、紛失します。

実例.

以下の時間列を考えてください。

>>> t['a'] = Time([100.0, 200.0], scale='tt', format='mjd')  

FITS規格では,追加の変換層が必要なフォーマットに戻る必要がある.“時間”欄 t['a'] 翻訳を受けます Astropy Time --> FITS --> Astropy Time フォーマット変換に対応しています mjd --> (jd1, jd2) --> jd それがそうです。最終的には (jd1, jd2) FITS時間基準に完全に適合したソフトウェアが実施される必要がある.

この点を考慮して,時間表示値を指定されたフォーマットで格納することで,/からFITへの読み出し/書き込み時間の機能を明示的にオフにすることができる. format 属性の属性。 Time column, instead of the (jd1, jd2) format, with no extra metadata in the header. This is the "lossy" version, but can help with portability. For the above example, the FITS column corresponding to t['a'] will then store [100.0 200.0] instead of [[ 2400100.5, 0. ], [ 2400200.5, 0. ]]. This is done by setting the Table serialization methods 書き込み時の時間列については,次の例を示す.

>>> from astropy.time import Time
>>> from astropy.table import Table
>>> from astropy.coordinates import EarthLocation
>>> t = Table()
>>> t['a'] = Time([100.0, 200.0], scale='tt', format='mjd')
>>> t.write('my_table.fits', overwrite=True,
...         serialize_method={Time: 'formatted_value'})
>>> tm = Table.read('my_table.fits')
>>> tm['a']
<Column name='a' dtype='float64' length=2>
100.0
200.0
>>> all(tm['a'] == t['a'].value)
True

デフォルトの場合、 serialize_method FOR TIME COLUMNS等しい 'jd1_jd2' すなわち,時間列は全精度で書き込まれる.

注釈

♪the astropy Time オブジェクトはFITS時間基準に正確にマッピングできない.

  • FORMAT

    FITSフォーマットは、ISO 8601、JD、MJDの3つのフォーマットのみを考慮する。 astropy 時間は他の多くのフォーマットを許可します unix あるいは…。 cxcsec 値を表すために用いられる。

    だから、 format 時間属性は格納されていません。FITSから読み込むと、ユーザは format あなたの望み通りです。

  • LOCATION

    FITS規格では,時間座標の参照位置はキーワードで表されるスカラーである.しかしながら、ベクトル化の基準位置または位置は、 Green Bank Keyword Convention これは登録されたFITS条約だ。はい。 astropy 時間、位置は、時間値にブロードキャスト可能な配列であってもよい。

    したがってベクトル化は location 時間属性の記憶と読み出しはこの約束に従う.

HDF 5

読む/書く/読む/書く HDF5 書類支持 format='hdf5' (これには h5py インストール待ち)。しかし、 .hdf5 ファイルを書き込む際にはファイル拡張子が自動的に識別され,読み込み時(ファイルの最初のバイトを用いてフォーマットを識別する)はHDF 5ファイルを自動的に識別する(異なる拡張子を用いても)ため,多くの場合,明示的に指定する必要はない. format='hdf5' それがそうです。

HDF 5ファイルは複数のテーブルを含むことができるので、通過すべきである path= 読んで書くときに議論をします。

実例.

名前を読むには data 名前のHDF 5ファイルから observations.hdf5 以下の動作を実行することができます。

>>> t = Table.read('observations.hdf5', path='data')

HDF 5ファイルにグループに埋め込まれたテーブルを読み出すには、以下の動作を実行することができる。

>>> t = Table.read('observations.hdf5', path='group/data')

新しいファイルに表を書き込むには、パスも指定しなければなりません:

>>> t.write('new_file.hdf5', path='updated_data')

以下のコマンドを使用して既存のファイルにテーブルを書き込むこともできます append=True **

>>> t.write('observations.hdf5', path='updated_data', append=True)

他のフォーマットと同様に overwrite=True パラメータは既存のファイルをカバーすることをサポートします。複数のデータセットを持つHDF 5ファイルの単一のテーブルのみを上書きするには、使用してください both ♪the overwrite=True そして append=True 論争する。

最後に、HDF 5ファイルを書き込む際には、 compression= データがディスク上で圧縮されることを保証するためにパラメータを使用することができる:

>>> t.write('new_file.hdf5', path='updated_data', compression=True)

メタデータとMixin列

astropy tables can contain metadata, both in the table meta attribute (which is an ordered dictionary of arbitrary key/value pairs), and within the columns, which each have attributes unit, format, description, and meta.

デフォルトの場合、テーブルをHDF 5に書き込む場合、コードは各キー/値ペアをテーブルに格納しようと試みる。 meta 表データ集合であるHDF 5属性.もし…。 meta HDF 5属性として格納可能なオブジェクトではありません。さらに、格納されるテーブル列が上に記載された任意の列属性の定義値を有する場合、これらのメタデータは not 保存され、警告されるだろう。

serialize_meta

すべての表メタデータと列メタデータをHDF 5ファイルに格納することを有効にするには、呼び出してください write() 方法: serialize_meta=True それがそうです。これにより、メタデータは、名前の同じファイルに含まれる別個のHDF 5データセットに格納される。 <path>.__table_column_meta__ それがそうです。ここ、ここ path 呼び出しで提供されるパラメータです write() **

>>> t.write('observations.hdf5', path='data', serialize_meta=True)

属性はYAML中のメタデータを後直列化し,表メタデータを文字列のデータセットとして格納する. ECSV header format 定義する。常用言語の多くはYAML解析器を持つため,非AsterpyアプリケーションでHDF 5を読み込むと,表メタデータに容易にアクセスして利用することができる.

自分から. astropy 3.0指定による serialize_meta=True 以下を含むテーブルをHDF 5に格納することもできる 混合柱 例えば Time あるいは…。 SkyCoord 柱です。

ジャイアントパンダ.

astropy Table supports the ability to read or write tables using some of the I/O methods 以下の範囲でご利用いただけます pandas. したがって、このインターフェースは、以下の関数/方法のための便利なラッパを提供する。

書式名.

データ記述

読者.読者

作家.作家

pandas.csv

CSV

read_csv()

to_csv()

pandas.json

JSON

read_json()

to_json()

pandas.html

HTML

read_html()

to_html()

pandas.fwf

固定幅.

read_fwf()

注意事項

  • 固定幅のライタは含まれていない pandas.

  • HTMLを読むには BeautifulSoup4 そして html5lib インストールします。

テーブルの読み出しまたは書き込みの際に、除算する format 例えばパンダにファイル名を伝えています

>>> t.write('data.csv', format='pandas.csv', sep=' ', header=False)
>>> t2 = Table.read('data.csv', format='pandas.csv', sep=' ', names=['a', 'b', 'c'])

JSViewer

表を提供するインタラクティブなHTML導出 HTML 編集器ですが使用しています DataTables ライブラリは、HTML表(列ランキング、検索、およびページ分けを有する)をインタラクティブに可視化することを可能にする。

例を引く

表を書くには、以下の操作を実行してください t 新しいファイルに追加:

>>> t.write('new_table.html', format='jsviewer')

いくつかの追加パラメータを使用することができる:

  • table_id :オブジェクトのHTML ID <table> マークは黙認しています 'table{{id}}' どこだ? id 表オブジェクトのIDです。

  • max_lines :最大行数。

  • table_class :追加 <table> タグは,カスタムテーブルのスタイルに用いることができる.

  • Jskwargs :伝達される他のパラメータ JSViewer それがそうです。

  • css :CSSスタイル、デフォルトでは astropy.table.jsviewer.DEFAULT_CSS それがそうです。

  • Htmldict :伝達される他のパラメータ HTML それがそうです。

VO表

読む/書く/読む/書く VO table 書類支持 format='votable' それがそうです。多くの場合、既存のVOテーブルは、ファイルヘッダから自動的に識別されるべきであるが、そうでない場合、またはディスクに書き込まれる場合には、フォーマットが明示的に指定されるべきである。

実例.

VOテーブルファイルが1つのテーブルのみを含む場合、以下のように使用することができる。

>>> t = Table.read('aj285677t3_votable.xml')

ファイルに複数のテーブルが存在する場合、通過しない限りエラーが発生する table_id= 論拠::

>>> t = Table.read('catalog.xml')
Traceback (most recent call last):
...
ValueError: Multiple tables found: table id should be set via the table_id= argument. The available tables are twomass, spitzer

>>> t = Table.read('catalog.xml', table_id='twomass')

新しいファイルを書き込むには、テーブルのIDも指定しなければなりません( t.meta['ID'] 定義済み)::

>>> t.write('new_catalog.xml', table_id='updated_table', format='votable')

文章を書く際には compression=True パラメータは、ディスク上のデータを強制的に圧縮するために使用されてもよい。 overwrite=True パラメータは、既存のファイルをカバーするために使用することができる。

直列化方法

astropy リストに列挙(直列化)する方式の細粒度制御をサポートする.例えば、ISOフォーマットの時間列をECSV ASCIIテーブルファイルに書き込む場合には、フル解像度(完璧な“往復”)を達成するために、ペアのJD 1/JD 2浮動小数点値に書き込む必要がある場合があり、または、他のアプリケーションがこれらの値を容易に読み取ることができるように、フォーマットされたISO日付文字列に書き込む必要がある場合がある。

直列化のデフォルトメソッドはフォーマット(FITS,ECSV,HDF 5)に依存する.例えば、HDF 5はバイナリフォーマットであるため、時間オブジェクトをJD 1/JD 2として格納することは意味があり、ECSVはプレーンASCIIフォーマットであり、通常、時間オブジェクトと同じフォーマットで日付を見ることが望ましい。デフォルト設定はまた,以下のような互換性を最大限に削減しようとしていることを反映している. astropy バージョンです。例えば、JD 1/JD 2ペアの前のバージョンに書き込むことができる場合には、時間列をフォーマット文字列としてECSVに書き込むことができるので、ECSVの現在のデフォルト設定は、フォーマットされた文字列を書き込むことである。

構成可能な直列化手法を持つ2つのクラスは Time and MaskedColumn. See the sections on Time Details そして Masked columns より多くの情報を得ることができます以下に各フォーマットのデフォルト値を示す:

格式.

時間です。

MaskedColumn

FITS

jd1_jd2

null_value

ECSV

formatted_value

null_value

HDF 5

jd1_jd2

data_mask

YAML

jd2_jd2

---

実例.

まず、時間列およびマスク列を含むテーブルを作成する:

>>> import sys
>>> from astropy.time import Time
>>> from astropy.table import Table, MaskedColumn
>>> t = Table(masked=True)
>>> t['tm'] = Time(['2000-01-01', '2000-01-02'])
>>> t['mc1'] = MaskedColumn([1.0, 2.0], mask=[True, False])
>>> t['mc2'] = MaskedColumn([3.0, 4.0], mask=[False, True])
>>> t
<Table masked=True length=2>
           tm             mc1     mc2
         object         float64 float64
----------------------- ------- -------
2000-01-01 00:00:00.000      --     3.0
2000-01-02 00:00:00.000     2.0      --

今ご希望のすべてを指定します Time JD 1/JD 2と書かれた列の和 mc1 データ/マスク対として書き込まれた列としてECSV:

>>> serialize_method = {Time: 'jd1_jd2', 'mc1': 'data_mask'}
>>> t.write(sys.stdout, format='ascii.ecsv', serialize_method=serialize_method)
# %ECSV 0.9
 ...
# schema: astropy-2.0
 tm.jd1    tm.jd2  mc1  mc1.mask  mc2
2451544.0    0.5   1.0   True     3.0
2451546.0   -0.5   2.0   False     ""

(明確にするためにスペースを追加)

気がつく tm 列はすでに置換されている tm.jd1 そして tm.jd2 列も同じ新しい列です mc1.mask すでに発生しており、それは明示的にマスク値を含む。使用すべきである. ascii.ecsv リーダは,オリジナル列を再構成する.

♪the serialize_method 2つの異なる方法でパラメータを設定することができる:

  • 単一文字列としては,以下のようになる data_mask それがそうです。その後、この値は、各列に適用され、時間列のないマスクテーブルにとって便利なポリシーである。

  • 一人として dict ここで、キーは、単一の列名であってもよいし、クラス(上の例に示すように)であってもよく、値は、対応する直列化方法である。