我有这个文件 '3dhst.v4.1.5.master.fits.gz'
我想打开它并将其变成一个DataFrame。我想从这个数据框中提取一个列的选择,然后将其与另一个DataFrame合并。我尝试了下面的方法。
import astropy
from astropy.io import fits
master = fits.open('3dhst.v4.1.5.master.fits.gz')
masterdf = pd.DataFrame(master[1].data)
masterdf = masterdf[['grism_id' , 'field' , 'ra' , 'dec' , 'z_best', 'z_best_s' , 'z_spec' ,
'z_peak_phot' , 'z_max_grism']]
我得到的是:
ValueError: Big-endian buffer not supported on little-endian compiler
这是我以前在这个文件中看到的错误信息 但我还是不明白为什么。astropy文档中说 "The open()
函数将无缝打开用gzip、bzip2或pkzip压缩过的FITS文件。請注意,在此情況下,我們談論的是用這些工具之一壓縮的FITS檔案(例如,.fits.gz檔案)。如果我只运行打开文件,我没有得到任何错误。我还尝试使用.fits.gz打开文件。
with gzip.open('3dhst.v4.1.5.master.fits.gz') as f:
master = fits.open(f)
这将返回一个空的响应 master[0].header
所以这个方法失败了。
使用 Table
Astropy的类可能是一个更好的选择,它有一个方法来转换为pandas的 DataFrame
:
from astropy.table import Table
t = Table.read('3dhst.v4.1.5.master.fits.gz')
t = t[['grism_id' , 'field' , 'ra' , 'dec' , 'z_best', 'z_best_s' , 'z_spec' , 'z_peak_phot' , 'z_max_grism']]
df = t.to_pandas()