用紙を書く¶
astropy.io.ascii
ASCII表は,リーダと同じクラス構造や基本ユーザインタフェースを用いてファイルや類似ファイルのオブジェクトに書き込むことができる.
♪the write()
関数は、フォーマットされたASCIIテーブルにデータテーブルを書き込む方法を提供する。
実例.¶
フォーマット付きASCII表を作成する write()
機能::
>>> import numpy as np
>>> from astropy.io import ascii
>>> x = np.array([1, 2, 3])
>>> y = x ** 2
>>> ascii.write([x, y], 'values.dat', names=['x', 'y'], overwrite=True)
♪the values.dat
そして、ファイルには、:
x y
1 1
2 4
3 9
ほとんどの入力表は サポートのフォーマット 読むことができる本は書くためにも使うことができる。これはフォーマットを作成するために大きな柔軟性を提供する。以下の例では、データをLaTeXテーブルとして書き込み、出力を送信するオプションを使用する sys.stdout
ファイルではありません:
>>> ascii.write(data, format='latex')
\begin{table}
\begin{tabular}{cc}
x & y \\
1 & 1 \\
2 & 4 \\
3 & 9 \\
\end{tabular}
\end{table}
簡単なフォーマットを作成するためのより高速なCythonエンジンもあり、デフォルトでこれらのフォーマットのエンジンを有効にします(参照 FAST ASCII I/O )である。このエンジンを無効にするには、パラメータを使用してください fast_writer
**
>>> ascii.write(data, 'values.csv', format='csv', fast_writer=False)
入力データフォーマット¶
入力 table
はいの論点です。 write()
初期化であってもよい Table
相手。この点についての詳細はご参照ください 表を構築する 部分的には、列リスト、列辞書、またはスレーブを使用することを含む numpy
配列(構造化または同構造).
表またはNumPy構造化配列¶
星間の星1つ. Table
オブジェクトやNumPy structured array (または記録配列) write()
機能します。
例を引く¶
以下の属性を持つ表を作成するには、以下の操作を実行してください numpy
構造化配列または既存の表::
>>> from astropy.io import ascii
>>> from astropy.table import Table
>>> data = Table({'a': [1, 2, 3],
... 'b': [4.0, 5.0, 6.0]},
... names=['a', 'b'])
>>> ascii.write(data)
a b
1 4.0
2 5.0
3 6.0
>>> data = np.array([(1, 2., 'Hello'), (2, 3., "World")],
... dtype=('i4,f4,a10'))
>>> ascii.write(data)
f0 f1 f2
1 2.0 Hello
2 3.0 World
の出力 astropy.io.ascii.read
これは Table
NumPy配列のデータオブジェクトであってもよく、この配列のデータオブジェクトは write()
機能します。
>>> data = ascii.read('data/daophot.dat', format='daophot')
>>> ascii.write(data, 'space_delimited_table.dat')
明細書 list
客体.¶
Pythonリスト list
オブジェクト(または任意の反復可能なオブジェクト)を入力として使用することができる:
>>> x = [1, 2, 3]
>>> y = [4, 5.2, 6.1]
>>> z = ['hello', 'world', '!!!']
>>> data = [x, y, z]
>>> ascii.write(data)
col0 col1 col2
1 4.0 hello
2 5.2 world
3 6.1 !!!
♪the data
対象は列名に関する情報を含まないため, Table
自動的に選択されました名前を指定する場合は、ご提供ください names
キーワードパラメータ。この例はまた、出力から1つの列を除外することを示している:
>>> ascii.write(data, names=['x', 'y', 'z'], exclude_names=['y'])
x z
1 hello
2 world
3 !!!
dict
の list
客体.¶
繰返し可能なオブジェクトを含む辞書は入力とすることができる write()
それがそうです。各dictキーは列名とし,値は対応する列の値を含む繰返し可能なオブジェクトでなければならない.
Python辞書はソートされていないので、出力列順序は予測できません。 names
パラメータを提供した。
例を引く¶
1つの表から1つの表を記入するには、以下の操作を実行してください dict
の list
対象::
>>> data = {'x': [1, 2, 3],
... 'y': [4, 5.2, 6.1],
... 'z': ['hello', 'world', '!!!']}
>>> ascii.write(data, names=['x', 'y', 'z'])
x y z
1 4.0 hello
2 5.2 world
3 6.1 !!!
パラメータ write()
¶
♪the write()
関数は,詳細な出力表フォーマットを指定するパラメータを多く受け取る.どれも サポートのフォーマット 対応するWriterクラスで処理されると、このクラスは異なるデフォルト値を定義することができるので、以下の説明では“典型的な”デフォルト値を言及することがある。これは…。 Basic
Writerは他と類似したWriterクラスである.
いくつかの出力フォーマット·ライタ·クラス(例えば、 Latex
あるいは…。 AASTex
)出力をさらにカスタマイズすることができる追加キーワードを受け取る。詳細については、これらのクラスの文書を参照されたい。
- 出力 :説明子を出力する
書き込み操作の出力を指定する2つの方法がある.
ファイル名(文字列)
クラスファイル·オブジェクト(open()、StringIOなどから)
- 表 :入力テーブル
- フォーマット :出力フォーマット(デフォルト値=“BASIC”)
これは、基本文字区切りテーブル、固定フォーマットテーブル、CDS互換テーブルなど、書き込むASCIIテーブルのフォーマットを指定します。このパラメータの値は、 サポートのフォーマット それがそうです。
- 仕切り符. :列区切り文字列
フィールドを区切るための単文字文字列は,通常空白文字とデフォルトである.他の常用値は、“、”|“または”\t“である可能性がある。
- 評論する. :表中の注釈行の開始を出力する文字列を定義する
上の
Basic
Writerこのデフォルト値は“#”である.どのような注釈を書くか、どのように書くかは選択されたフォーマットに依存する。アノテーションは入力テーブル中の文字列リストとして定義される.meta['comments']
元素です。与えられたオブジェクトのメタデータ中の注釈Table
タイトルの前に書かれていますがCommentedHeader
タイトルを注釈した後にフォームアノテーションを書き込む.注釈作成を無効にするには、設定してくださいcomment=False
それがそうです。- 格式. :データ型変換器の辞書
キー(列名)ごとに,与えられた値を用いて列データを文字列に変換する.フォーマット値が文字列と類似している場合、Pythonフォーマット文(例えば、‘%0.2 F’%VALUE)として使用される。呼び出し可能な関数である場合、変換すべき列の値を含む単一のパラメータを使用して関数を呼び出す。例::
astropy.io.ascii.write(table, sys.stdout, formats={'XCENTER': '%12.1f', 'YCENTER': lambda x: round(x, 1)},
- 名 :各データ列に対応する名前リスト
各データ列の完全名前リストを定義する.これは、利用可能であれば、データテーブルから決定された名前を上書きする。提供されていない場合、データテーブル内の名前または自動生成された名前が使用される。
- include_names :出力に含まれる名前リスト
データテーブルや
names
パラメータは,このリスト中の“出力列のみ”を選択する.もし提供されていない場合は、すべての名前を含めてください。- exclude_names :出力から除外する名前リスト
これらの名前は出力列リストから除外する.これは適用される その後 ♪the
include_names
濾過する。指定されていなければ,どの列も排除しない.- fill_values :パディング値説明子リスト
これは、テーブルに欠けている値を充填するために使用されてもよく、または特別な意味を有する値を置換するため
ご参照ください 誤りまたは不足値 部分的には,文法に関するより多くの情報を知る.文法は表を読む場合とほぼ同じである.特別な価値があります
astropy.io.ascii.masked
すなわち,“マスクテーブル中のすべてのマスク値のためにこの文字列を出力する”(デフォルトでは空文字列が使用される.""
):>>> import sys >>> from astropy.table import Table, Column, MaskedColumn >>> from astropy.io import ascii >>> t = Table([(1, 2), (3, 4)], names=('a', 'b'), masked=True) >>> t['a'].mask = [True, False] >>> ascii.write(t, sys.stdout) a b "" 3 2 4 >>> ascii.write(t, sys.stdout, fill_values=[(ascii.masked, 'N/A')]) a b N/A 3 2 4
テーブルを作成する際には、どの値を置き換える前に、すべての値が文字列に変換されることに注意されたい。なぜなら
fill_values
仕様に完全にマッチするセルのみを置き換えるには、値ごとに文字列表現を提供する必要があります(スペースを除く)。例えば、以下のコマンドでは-99
フォーマットはコンマの後の2桁の数字ですので、交換する必要があります-99.00
そうではありません-99
**>>> t = Table([(-99, 2), (3, 4)], names=('a', 'b')) >>> ascii.write(t, sys.stdout, fill_values = [('-99.00', 'no data')], ... formats={'a': '%4.2f'}) a b "no data" 3 2.00 4
同様に、固定長フォーマットを有する列の値を置き換える場合(例えば、
'f4.2'
)であれば、置き換える文字列は同じ文字数でなければならない。上の例ではfill_values=[(' nan',' N/A')]
効きますよ。- fill_include_names :以下の要因の影響を受ける列名リスト
fill_values
提供されていない場合は
fill_values
すべての列に影響を与えることができる。- fill_exclude_names :影響を受けない列名リスト
fill_values
提供されていない場合は
fill_values
すべての列に影響を与えることができる。- fast_writer :高速Cythonコンパイラを使用するかどうか
もしこのパラメータが
None
(デフォルトの場合は)、write()
より高速なライタを使用してみます(参照 FAST ASCII I/O )できれば。指定fast_writer=False
この行為を無効にする。- 作家.作家 :Writerクラス( 捨てて使う. …に賛成する.
format
)作家班( このパラメータは、基本文字区切りテーブル、固定フォーマットテーブル、CDS互換テーブルなど、書き込むASCIIテーブルのトップフォーマットを指定します。このパラメータの値はWriterクラスでなければなりません。基本的な使い方はこれは内蔵されていることを意味します 拡張モジュールリーダクラス それがそうです。ReaderクラスとWriterクラスは同義語であり,言い換えればReaderクラスも書くことができるが,歴史的な理由からReaderクラスと呼ばれることが多いことに注意されたい.
ECSVフォーマット¶
♪the Enhanced Character-Separated Values (ECSV) format 書いてもいいです astropy
Table
あるいは…。 QTable
データセットは、プレーンテキストデータファイルに変換され、情報を失わずにテーブルを読み出す。このフォーマットは,YAML符号化されたデータ構造を用いて直列化列仕様と表メタデータの重要な問題を扱う.実際のテーブルデータは,様々な非専用のCSVテーブルリーダと互換性がある標準的な文字区切り値(CSV)形式で格納されている.
混合柱¶
以下から始めます astropy
2.0標準のストレージだけでなく Column
対象はECSVに提出されているが,以下のものも含まれている 混合柱 :
In general, a mixin column may contain multiple data components as well as
object attributes beyond the standard Column
attributes like
format
or description
. Storing such mixin columns is done by replacing
the mixin column with column(s) representing the underlying data component(s)
and then inserting metadata which informs the reader of how to reconstruct the
original column. For example, a SkyCoord
mixin column in
'spherical'
representation would have data attributes ra
, dec
,
distance
, along with object attributes like representation_type
or
frame
.
例を引く¶
以下の属性を持つ表の作成 SkyCoord
column can be accomplished with a mixin column, which is supported by ECSV それがそうです。混合列を格納するには、以下の動作を実行してください。
>>> from astropy.io import ascii
>>> from astropy.coordinates import SkyCoord
>>> import astropy.units as u
>>> from astropy.time import Time
>>> from astropy.table import QTable, Column
>>> sc = SkyCoord(ra=[1,2]*u.deg, dec=[3,4]*u.deg, distance=[5,6]*u.m,
... frame='fk4', obstime=Time('2000:001'))
>>> sc.info.description = 'flying circus'
>>> c = Column([1,2])
>>> q = [1,2]*u.m
>>> q.info.format = '.2f'
>>> t = QTable([c, q, sc], names=['c', 'q', 'sc'])
>>> ascii.write(t, format='ecsv')
# %ECSV 0.9
# ---
# datatype:
# - {name: c, datatype: int64}
# - {name: q, unit: m, datatype: float64}
# - {name: sc.ra, unit: deg, datatype: float64}
# - {name: sc.dec, unit: deg, datatype: float64}
# - {name: sc.distance, unit: m, datatype: float64}
# meta: !!omap
# - __serialized_columns__:
# q:
# __class__: astropy.units.quantity.Quantity
# value: !astropy.table.SerializedColumn {name: q}
# sc:
# __class__: astropy.coordinates.sky_coordinate.SkyCoord
# __info__: {description: flying circus}
# dec: !astropy.table.SerializedColumn
# __class__: astropy.coordinates.angles.Latitude
# value: !astropy.table.SerializedColumn {name: sc.dec}
# distance: !astropy.table.SerializedColumn
# __class__: astropy.coordinates.distances.Distance
# value: !astropy.table.SerializedColumn {name: sc.distance}
# equinox: !astropy.time.Time {format: byear_str, in_subfmt: '*', jd1: 2400000.5,
# jd2: 33281.92345905, out_subfmt: '*', precision: 3, scale: tai}
# frame: fk4
# obstime: !astropy.time.Time {format: yday, in_subfmt: '*', jd1: 2451544.5, jd2: 0.0,
# out_subfmt: '*', precision: 3, scale: utc}
# ra: !astropy.table.SerializedColumn
# __class__: astropy.coordinates.angles.Longitude
# value: !astropy.table.SerializedColumn {name: sc.ra}
# wrap_angle: !astropy.coordinates.Angle
# unit: !astropy.units.Unit {unit: deg}
# value: 360.0
# representation: spherical
# schema: astropy-2.0
c q sc.ra sc.dec sc.distance
1 1.0 1.0 3.0 5.0
2 2.0 2.0 4.0 6.0
♪the '__class__'
キーワードは完全に限定されたクラス名を提供し、明確に許容されなければならない astropy
授業を受けます。ユーザが指定した許可クラスのオプションは追加されていない.♪the '__info__'
キーワードには基準値が含まれている Column
属性、例えば description
あるいは…。 format
複数の直列化された列によって表される任意の混合列のためのものである。
遮蔽柱.¶
デフォルトでは、ECSVフォーマットは、出力テーブルにおいて空(ゼロ長)文字列を使用して、データのマスクまたは欠落データを表す MaskedColumn
柱です。場合によっては十分ではないかもしれません
有効データとして空(ゼロ長)文字列を含む文字列.
マスクされたデータ値は、後でマスクされたこれらの値をキャンセルすることができるように格納され
この場合、以下の例に示すように、完全なデータおよびマスク自体が列として出力テーブルに書き込まれるべきであることを指定するために、機構を使用することができる。より多くの文脈については、ご参照ください 直列化方法 それがそうです。
例を引く¶
完全データおよびマスク自体を列として出力テーブルに書き込むには、以下の操作を実行してください。
>>> from astropy.table.table_helpers import simple_table
>>> t = simple_table(masked=True)
>>> t['c'][0] = "" # Valid empty string in data
>>> t
<Table masked=True length=3>
a b c
int64 float64 str1
----- ------- ----
-- 1.0
2 2.0 --
3 -- e
現在,ECSVコンパイラに文字列列のために単独のデータ列とマスク列を出力するように伝えている. 'c'
**
>>> t['c'].info.serialize_method['ecsv'] = 'data_mask'
これを書く際は、出力が表示されますのでご注意ください 'c'
列(遮蔽されたものを含む 'd'
値)と新しい列 'c.masked'
それがそうです。ECSVリーダーに説明するメタデータも格納されています 'c'
そして 'c.masked'
1つのコンポーネントの列として MaskedColumn
目標:
>>> ascii.write(t, format='ecsv')
# %ECSV 0.9
# ---
# datatype:
# - {name: a, datatype: int64}
# - {name: b, datatype: float64}
# - {name: c, datatype: string}
# - {name: c.mask, datatype: bool}
# meta: !!omap
# - __serialized_columns__:
# c:
# __class__: astropy.table.column.MaskedColumn
# data: !astropy.table.SerializedColumn {name: c}
# mask: !astropy.table.SerializedColumn {name: c.mask}
# schema: astropy-2.0
a b c c.mask
"" 1.0 "" False
2 2.0 d True
3 "" e False
このコンテンツを読み直すと、列の最初の行の空(ゼロの長さ)文字列 'c'
保存されています表の統一I/Oインタフェースを使用してすべての列をデータおよびマスク対として書くこともできる serialize_method
キーワードパラメータ::
>>> t.write('out.ecsv', format='ascii.ecsv', serialize_method='data_mask')
この場合、ファイルを読み込むと、すべてのデータ値(オリジナルテーブルの“マスクの下”のデータ値を含む)は完全に回復します。