使用 astropy.io.ascii 格式化

Formatting with astropy.io.ascii

我有一个 AstroPy Table 数据:

>>> data

 ra           dec          redshift ... yMeanPSFMag       yMeanPSFMagErr
 ------------ ------------ -------- ... ----------------- --------------------

 0.34011348  26.83588138     5.75 ...  19.49519920349121   0.03307399898767471
 0.66411726  25.84304425     5.82 ...  19.45319938659668   0.04351300001144409
 1.4680833   -0.1154999      5.85 ...  20.118600845336914  0.18635299801826477
 2.10739     -6.43456        5.93 ...  20.439899444580078  0.16982899606227875

我只是想以控件格式的方式输出它:

>>>  df = data['ra', 'dec']
>>>  ascii.write(df, 'temp.dat', overwrite=True, formats="{df['ra']:%3.1f, df['dec']:%8.3f}")

我得到一个:

TypeError: string indices must be integers

我查看了 this package,但看不到任何直接有用的内容。

我经常这样做。贴近您所写的内容:

df = data['ra', 'dec'] 
ascii.write(df, 'temp.dat', overwrite=True, formats={'ra':'%3.1f','dec':'%8.3f'})

或者我更喜欢的方式是

aformats = ['%.1f','%.3f']
oformats = dict(zip(df.colnames, aformats))
ascii.write(df, 'temp.dat', overwrite=True, formats=oformats)

bc 通常不需要指定总位数。

另一个要记住的特性是 table 本身可以存储所需的格式。这很方便,因为它总是打印得很好,你甚至可以写入 FITS 并返回,列格式将被保留。

In [2]: dat = Table({'ra': [1.2345123, 234.5678232], 'dec': [20.123, -0.1231]})
In [3]: dat['ra'].format = '8.4f'
In [4]: dat['dec'].format = '8.4f'
In [5]: dat
Out[5]: 
<Table length=2>
   ra      dec   
float64  float64 
-------- --------
  1.2345  20.1230
234.5678  -0.1231

In [6]: ascii.write(dat, format='fixed_width', delimiter='')
       ra       dec 
   1.2345   20.1230 
 234.5678   -0.1231 

In [7]: dat.write('junk.fits', overwrite=True)
In [8]: dat2 = Table.read('junk.fits')
In [9]: dat2
Out[9]: 
<Table length=2>
   ra      dec   
float64  float64 
-------- --------
  1.2345  20.1230
234.5678  -0.1231