使用 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
我有一个 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