データテーブル. (astropy.table

序言:序言

astropy.table 異種データテーブルを熟知した方法で記憶して操作する機能を提供する numpy ユーザーです。このソフトウェアパッケージのいくつかの注目すべき機能は、以下のことを含む。

  • 様々な入力データ構造やタイプから表を初期化する.

  • テーブルは、列の追加または削除、列名の変更、または新しいデータ行の追加によって修正されます。

  • 欠損値を含む表を扱う.

  • 柔軟なデータ構造として表と列メタデータを含む.

  • 列の説明,単位,出力フォーマットを指定する.

  • 閲覧長表を交互にスクロールして使用するのと同様に more それがそうです。

  • 新しいテーブルは、表から行または列を選択することで作成されます。

  • 執行する. 表操作 データベース接続、直列接続、箱詰めなど。

  • テーブルインデックスは、エントリまたは範囲を迅速に検索するために維持される。

  • 多次元列を操作する。

  • 処理表中の非自機(混合)列タイプ.

  • 方法: 読み書き表オブジェクト 書類に転送します。

  • 以下の用途のためのフック サブクラス化表 そのコンポーネントのクラスである.

スタート

フォーム作成,アクセスフォーム要素,修正フォームの基本ワークフローを以下に示す.これらの例は簡明で完全な例を示しています astropy.table 文書は Vbl.使用 table 一節です。

First create a simple table with columns of data named a, b, c, and d. These columns have integer, float, string, and Quantity values respectively:

>>> from astropy.table import QTable
>>> import astropy.units as u
>>> import numpy as np

>>> a = np.array([1, 4, 5], dtype=np.int32)
>>> b = [2.0, 5.0, 8.5]
>>> c = ['x', 'y', 'z']
>>> d = [10, 20, 30] * u.m / u.s

>>> t = QTable([a, b, c, d],
...            names=('a', 'b', 'c', 'd'),
...            meta={'name': 'first table'})

コメント:

  • a これは numpy 指定のある dtypeint32 それがそうです。データタイプが提供されていない場合、整数のデフォルトタイプは int64 MacとLinuxで int32 Windows上にあります。

  • b 1人前です float 値は,以下のように表される. float64 それがそうです。

  • c 1人前です str 値は,Unicodeと表す.参照してください バイト列. より多くの情報を得ることができます

  • d これは Quantity 配列しています私たちが使ったからです QTable これはネイティブを格納しています Quantity 交渉のテーブルで持ってきました 単位と数量 (astropy.units ) 表のこの列に追加します。

注釈

表データに単位がない場合やご利用を希望しない場合は Quantity 使用することができます Table 分類して表を作成する。♪the only 両者の違い QTable そして Table 単位を持つ列を追加する際の行為.参照してください 数量と数量表 そして 単位付き柱 差異や用例の詳細については、参照されたい。

他にも多くの方法があります 表を構築する 行リスト(メタグループまたは辞書)からのものを含み, numpy 構造化または二次元配列は、列や行をインクリメントすることで、 pandas.DataFrame それがそうです。

いくつかの方法があります アクセス表. それがそうです。表の値および列の定義に関する詳細は、以下のように取得することができます。

>>> t
<QTable length=3>
  a      b     c      d
                    m / s
int32 float64 str1 float64
----- ------- ---- -------
    1     2.0    x    10.0
    4     5.0    y    20.0
    5     8.5    z    30.0

この表に関する要約情報は、以下のように取得することができます。

>>> t.info
<QTable length=3>
name  dtype   unit  class
---- ------- ----- --------
   a   int32         Column
   b float64         Column
   c    str1         Column
   d float64 m / s Quantity

Jupyterノートでは,フォームにフォーマットされたHTMLフォームが表示される(フォーム表示方式に関する詳細な情報は変更することができる. astropy.table.default_notebook_table_class 構成項):

../_images/table_repr_html.png

あるいは、ブラウザ内で検索することで、より華やかなノートインタフェースを取得し、使用することもできます show_in_notebook

../_images/table_show_in_nb.png

フォームを印刷する場合(ノートまたはテキストコンソールセッションから)場合、フォーマットされたバージョンが表示されます。

>>> print(t)
 a   b   c    d
            m / s
--- --- --- -----
  1 2.0   x  10.0
  4 5.0   y  20.0
  5 8.5   z  30.0

特定の列のフォーマットが好きでない場合は、以下のように変更することができます。

>>> t['b'].info.format = '7.3f'
>>> print(t)
 a     b     c    d
                m / s
--- ------- --- -----
  1   2.000   x  10.0
  4   5.000   y  20.0
  5   8.500   z  30.0

より長いテーブルの場合、フォームを上下にスクロールすることができ、毎回1ページスクロールすることができます:

>>> t.more()  

ブラウザでHTML形式のフォームとして表示することもできます:

>>> t.show_in_browser()  

またはインタラクティブ(検索可能および順序付け可能)Javascriptテーブルとして:

>>> t.show_in_browser(jsviewer=True)  

この表に関するいくつかの高度な情報をチェックします:

>>> t.colnames
['a', 'b', 'c', 'd']
>>> len(t)
3
>>> t.meta
{'name': 'first table'}

よく知っている列ごとまたは行ごとにデータにアクセスする numpy 構造化配列文法::

>>> t['a']       # Column 'a'
<Column name='a' dtype='int32' length=3>
1
4
5

>>> t['a'][1]    # Row 1 of column 'a'
4

>>> t[1]         # Row object for table row index=1
<Row index=1>
  a      b     c      d
                    m / s
int32 float64 str1 float64
----- ------- ---- -------
    4   5.000    y    20.0


>>> t[1]['a']    # Column 'a' of row 1
4

行(スライスを使用)または列(列名を使用)でテーブルのサブセットを検索することができ、サブセットは新しいテーブルとして返される:

>>> print(t[0:2])      # Table object with rows 0 and 1
 a     b     c    d
                m / s
--- ------- --- -----
  1   2.000   x  10.0
  4   5.000   y  20.0


>>> print(t['a', 'c'])  # Table with cols 'a', 'c'
 a   c
--- ---
  1   x
  4   y
  5   z

表を修正する その場で柔軟で、仕事の仕方はあなたが予想していたように:

>>> t['a'][:] = [-1, -2, -3]    # Set all column values in place
>>> t['a'][2] = 30              # Set row 2 of column 'a'
>>> t[1] = (8, 9.0, "W", 4 * u.m / u.s) # Set all row values
>>> t[1]['b'] = -9              # Set column 'b' of row 1
>>> t[0:2]['b'] = 100.0         # Set column 'b' of rows 0 and 1
>>> print(t)
 a     b     c    d
                m / s
--- ------- --- -----
 -1 100.000   x  10.0
  8 100.000   W   4.0
 30   8.500   z  30.0

以下の置換、追加、削除、および重命列を使用して:

>>> t['b'] = ['a', 'new', 'dtype']   # Replace column b (different from in-place)
>>> t['e'] = [1, 2, 3]               # Add column d
>>> del t['c']                       # Delete column c
>>> t.rename_column('a', 'A')        # Rename column a to A
>>> t.colnames
['A', 'b', 'd', 'e']

表に新たなデータ行を追加すると以下のようになる.単位値は中で与えられていることに注意してください cm / s ただし,表に追加し, 0.1 m / s 既存の単位と一致する。

>>> t.add_row([-8, 'string', 10 * u.cm / u.s, 10])
>>> len(t)
4

例えば、設定することによって、欠落値をサポートするテーブルを作成することができます masked=True **

>>> t = QTable([a, b, c], names=('a', 'b', 'c'), masked=True, dtype=('i4', 'f8', 'U1'))
>>> t['a'].mask = [True, True, False]
>>> t
<QTable masked=True length=3>
  a      b     c
int32 float64 str1
----- ------- ----
   --     2.0    x
   --     5.0    y
    5     8.5    z

In addition to Quantity, you can include certain object types like Time, SkyCoord, and NdarrayMixin in your table. These "mixin" columns behave like a hybrid of a regular Column and the native object type (see 混合柱). For example:

>>> from astropy.time import Time
>>> from astropy.coordinates import SkyCoord
>>> tm = Time(['2000:002', '2002:345'])
>>> sc = SkyCoord([10, 20], [-45, +40], unit='deg')
>>> t = QTable([tm, sc], names=['time', 'skycoord'])
>>> t
<QTable length=2>
         time          skycoord
                       deg,deg
        object          object
--------------------- ----------
2000:002:00:00:00.000 10.0,-45.0
2002:345:00:00:00.000  20.0,40.0

起動以来の時間間隔を計算してみましょう Chandra X-ray Observatory 飛行機に乗る STS-93 私たちの表に格納されています Quantity 日数:

>>> dt = t['time'] - Time('1999-07-23 04:30:59.984')
>>> t['dt_cxo'] = dt.to(u.d)
>>> t['dt_cxo'].info.format = '.3f'
>>> print(t)
         time          skycoord   dt_cxo
                       deg,deg      d
--------------------- ---------- --------
2000:002:00:00:00.000 10.0,-45.0  162.812
2002:345:00:00:00.000  20.0,40.0 1236.812

Vbl.使用 table

使用の詳細情報 astropy.table 以下の各節で関連情報を提供する.

構造表

アクセス表.

表を修正する

表操作

標引.

マスクをする.

表のI/O

混合柱

実施する.

性能提示

建設する. Table 以下のコマンドを用いてオブジェクトをプログレッシブに表示する add_row() とても遅いかもしれません

>>> from astropy.table import Table
>>> t = Table(names=['a', 'b'])
>>> for i in range(100):
...    t.add_row((1, 2))

行を作成するためにコードにループする必要がある場合、より速い方法は、行リストを構築して作成することです Table 最後の対象:

>>> rows = []
>>> for i in range(100):
...    rows.append((1, 2))
>>> t = Table(rows=rows, names=['a', 'b'])

編集中です Table 使用 MaskedColumn 至る .ecsv Vbl.使用 write() とても遅いかもしれません

>>> from astropy.table import Table
>>> import numpy as np
>>> x = np.arange(10000, dtype=float)
>>> tm = Table([x], masked=True)
>>> tm.write('tm.ecsv', overwrite=True) 

もしあなたが書きたいなら .ecsv Vbl.使用 write() そして使用します serialize_method='data_mask' それがそうです。これは非マスクバージョンのデータを使用した方が速い:

>>> tm.write('tm.ecsv', overwrite=True, serialize_method='data_mask') 

読み該当Memmap=True

デフォルトの場合 read() 表全体をメモリに読み込むと,大量のメモリや時間を占有する可能性があり,具体的には表のサイズやファイルフォーマットに依存する.場合によっては、オプションを選択することによって、テーブルのサブセットのみを読み出すことができる memmap=True それがそうです。

FITバイナリテーブルの場合、データはライン毎に格納され、ラインのサブセットのみを読み出すことができるが、読み出し整列は、フォームデータ全体をメモリにロードする:

>>> import numpy as np
>>> from astropy.table import Table
>>> tbl = Table({'a': np.arange(1e7),
...              'b': np.arange(1e7, dtype=float),
...              'c': np.arange(1e7, dtype=float)})
>>> tbl.write('test.fits', overwrite=True)
>>> table = Table.read('test.fits', memmap=True)  # Very fast, doesn't actually load data
>>> table2 = tbl[:100]  # Fast, will read only first 100 rows
>>> print(table2)  # Accessing column data triggers the read
 a    b    c
---- ---- ----
0.0  0.0  0.0
1.0  1.0  1.0
2.0  2.0  2.0
...  ...  ...
98.0 98.0 98.0
99.0 99.0 99.0
Length = 100 rows
>>> col = table['my_column']  # Will load all table into memory

今のところ read() 支持しない memmap=True HDF 5およびASCIIファイルフォーマットに使用されます。

参照/API

Asterpy.tableパッケージ

機能

hstack \(表[, join_type, uniq_col_name, ...] )

列に沿って表(水平)を重ねる

join \(左,右[, keys, join_type, ...] )

指定キー上で左テーブルと右テーブルの連結を実行する.

represent_mixins_as_columns \(未定) [, ...] )

表示入力テーブル tbl のみ使用する Column あるいは…。 MaskedColumn 物体です。

setdiff \(表1、表2[, keys] )

表の行の集合の差をとる.

unique \(入力_表[, keys, silent, keep] )

折り返し表の唯一の行です。

vstack \(表[, join_type, metadata_conflicts] )

垂直スタックテーブル(行に沿って)

dstack \(表[, join_type, metadata_conflicts] )

深さスタックの列に沿って

join_skycoord \(距離[, distance_func] )

距離マッチングを用いてSkyCoord列を接続するブースタ関数を用いる.

join_distance \(距離[, kdtree_args, ...] )

距離マッチング連結表列のブースタ関数を用いる.

クラス

BST \(データ,行_インデックス[, unique] )

純粋なPythonの基本的な二分木は、インデックスエンジンとして使われます。

Column \([data, name, dtype, shape, length, ...] )

Tableオブジェクトで使用するデータ列を定義する.

ColumnGroups \(親レベル_列[, indices, keys] )

ColumnInfo \([bound] )

名前、記述、フォーマットなどのメタ情報のコンテナ。

Conf \()

の構成パラメータ astropy.table それがそうです。

JSViewer \([use_local_files, display_length] )

フォームを提供するインタラクティブなHTML導出.

MaskedColumn \([data, name, mask, fill_value, ...] )

Tableオブジェクトで使用するマスクデータ列を定義する.

NdarrayMixin \(OBJ,*args, * *kwargs)

Mixin列クラスは,任意の数の放射線を表に格納することを許可する.

QTable \([data, masked, names, dtype, meta, ...] )

異種データテーブルのクラスを示す.

Row \(表,インデックス)

Tableオブジェクトの1行のクラスを示す.

SCEngine \(データ,行_インデックス[, unique] )

木ベースの高速インデックス実装、使用 sortedcontainers 小包です。

SerializedColumn \

Dictのサブクラスは、表現において、配列が表中の列に含まれる混合属性(主データまたは類似配列の属性)の名前(および可能な他の情報)を含むために使用される。

SortedArray \(データ,行_インデックス[, unique] )

配列配列コンテナをNumpy配列リストを用いて実現する.

StringTruncateWarning \

文字列に割り当てられた値が基本(数字)文字列長が短すぎて切断された場合,警告クラスが出現する.

Table \([data, masked, names, dtype, meta, ...] )

異種データテーブルのクラスを示す.

TableAttribute \([default] )

表サブクラスのカスタム属性を定義するための記述子.

TableColumns \([cols] )

1組の列のOrderedDictサブクラス.

TableFormatter \()

TableGroups \(親レベル_表[, indices, keys] )

TableMergeError \

TableReplaceWarning \

メソッドは表列の場合の警告クラスを置き換える. Table.__setitem__ 文法、例えば

PprintIncludeExclude \([default] )

出力リストの可視性を印刷するタプルを維持制御します。

クラス継承関係図

Inheritance diagram of astropy.table.bst.BST, astropy.table.column.Column, astropy.table.groups.ColumnGroups, astropy.table.column.ColumnInfo, astropy.table.Conf, astropy.table.jsviewer.JSViewer, astropy.table.column.MaskedColumn, astropy.table.ndarray_mixin.NdarrayMixin, astropy.table.table.QTable, astropy.table.row.Row, astropy.table.soco.SCEngine, astropy.table.serialize.SerializedColumn, astropy.table.sorted_array.SortedArray, astropy.table.column.StringTruncateWarning, astropy.table.table.Table, astropy.table.table.TableAttribute, astropy.table.table.TableColumns, astropy.table.pprint.TableFormatter, astropy.table.groups.TableGroups, astropy.table.np_utils.TableMergeError, astropy.table.table.TableReplaceWarning, astropy.table.table.PprintIncludeExclude