格式化方式astropy.io.ascii码

2024-09-30 04:31:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个天文数据表:

>>> 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,但看不到任何直接有用的东西。你知道吗


Tags: redshiftdfdata格式方式asciitempdec
2条回答

我经常这样做。为了接近你写的东西:

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通常不需要指定总位数。你知道吗

要记住的另一个特性是表本身可以存储所需的格式。这是方便的,因为它总是打印得很好,你甚至可以写适合和回和列格式将被保留。你知道吗

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

相关问题 更多 >

    热门问题