Форматирование с помощью astropy.io.ascii - PullRequest
0 голосов
/ 04 июня 2018

У меня есть таблица данных AstroPy:

>>> 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

Я посмотрел на этот пакет , но не вижу ничего полезного.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Еще одна особенность, которую следует иметь в виду, заключается в том, что сама таблица может хранить желаемое форматирование.Это удобно, потому что всегда хорошо печатает, и вы даже можете писать в 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
0 голосов
/ 04 июня 2018

Я делаю это довольно часто.Чтобы держаться ближе к тому, что вы написали:

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, указывать общее количество цифр не часто необходимо.

...