2

astropy.table モジュールの Tables オブジェクトをいじっています。

以下のコードは、私が扱っているデータのタイプを示しています。

In [44]: table             
Out[44]: 
<Table length=9>
defocus  source   Chi2  xcentroid ycentroid  FWHMx   FWHMy    Peak 
float32 float32 float32  float32   float32  float32 float32 float32
------- ------- ------- --------- --------- ------- ------- -------
   -0.3     0.0 346.648    2056.5     55.82 11.8635 11.8635 182.277
   -0.3     4.0 148.302   2056.49   1911.02 6.66554 6.66554 299.074
   -0.3     8.0 347.208   2056.51   3922.99 6.83129 6.83129 326.476
  -0.26     0.0 318.489    2056.5   55.8803  10.206  10.206 195.055
  -0.26     4.0 152.501   2056.51   1911.02  6.9012  6.9012 244.817
  -0.26     8.0 285.845   2056.49   3922.99  7.7939  7.7939 236.194
  -0.22     0.0 264.113    2056.5   55.9053 8.79704 8.79704 187.376
  -0.22     4.0 163.228    2056.5   1911.02 2.43716 2.43716 402.182
  -0.22     8.0 230.017    2056.5   3922.99 6.70312 6.70312 235.376

In [45]: type(table)       
Out[45]: astropy.table.table.Table

In [46]: cols=table.columns

In [47]: type(cols)
Out[47]: astropy.table.table.TableColumns

In [48]: type(cols[0])
Out[48]: astropy.table.column.Column 

In [50]: mylist_1 = [x for x in cols]

In [51]: mylist_2 = [cols[k] for k in range(len(cols))]

In [52]: type(mylist_1[0])
Out[52]: str

In [53]: type(mylist_2[0])
Out[53]: astropy.table.column.Column

In [54]: mylist_1[0]
Out[54]: 'defocus'

In [55]: mylist_2[0]
Out[55]: 
<Column name='defocus' dtype='float32' length=9>
 -0.3
 -0.3
 -0.3
-0.26
-0.26
-0.26
-0.22
-0.22
-0.22

私は2行を期待していました:

mylist_1 = [x for x in cols]

mylist_2 = [cols[k] for k in range(len(cols))]

上記の出力でわかるように (mylist_1 には列名のみが含まれ、列自体は含まれません)。どうしてこんなことに?「cols」オブジェクトについてよくわからないことがありますか?

あなたの洞察に感謝します。

(テーブルをfitsファイルに書き込もうとしているときにこれに遭遇しました-astropy.io.fitsを使用して-適切な列リストを作成する必要がありますが、これは予想されるほど明白ではありません...)

4

3 に答える 3

2

オブジェクト(属性astropy.table.table.TableColumnsを介してアクセス) は、リストではなく、順序付けられた dictです。そのため、列名のリストが表示されます (通常の dict を反復すると、値ではなくキーが表示されるのと同じです)。 columns[x for x in cols]

便宜上、インデックス付きアクセスとcol[0]orのようなスライスもサポートしていますcols[1:3]。しかし、リストのようなアクセスをサポートしていますがTableColumns、何よりもまず辞書です。

PR #4394 では、をサポートする新しいitercols()メソッドが追加されますcols_list = [x for x in t.itercols()]

于 2016-04-21T12:57:04.573 に答える