从 .fits 文件构建 pandas dataframe

12

我有一个包含数据的 .fits 文件。

我想从这个特定的文件构建一个 pandas dataframe,但我不知道怎么做。

data = fits.open('datafile')
data.info

提供:

No.    Name         Type      Cards   Dimensions   Format
0    PRIMARY     PrimaryHDU       6   (12, 250000)   float64 

并且:

data[0].data.shape

提供:

(250000, 12)

除非您提供此文件的样本以及所需结果的样式,否则无法回答。 - EdChum
这是一个数据集,包含250,000行数据,表示人员信息,其中12个特征表示他们的特点。因此,我需要一个简单的250000x12数据框。 - user2867798
你尝试过 df = pd.read_csv('datafile') 吗? - EdChum
是的,我遇到了UnicodeDecode错误。 - user2867798
1
FITS是一种主要用于天文学的混合文本和二进制文件格式,而read_csv与其无关。 - Iguananaut
2个回答

17

根据您的问题和astropy文档(http://docs.astropy.org/en/stable/io/fits/),看起来您只需要执行以下操作:

from astropy.io import fits
import pandas
with fits.open('datafile') as data:
    df = pandas.DataFrame(data[0].data)

编辑: 我对astropy没有太多经验,但其他人提到过,你可以将fits文件读入一个Table对象中,该对象有一个to_pandas()方法:

from astropy.table import Table
dat = Table.read('datafile', format='fits')
df = dat.to_pandas()

可能值得调查。

http://docs.astropy.org/en/latest/table/pandas.html


这里只是一个小注释:如果您明确地open文件,则应关闭该文件,或者使用上下文管理器:with fits.open('datafile') as data:,以便您不会留下未关闭的文件句柄。 - MSeifert

4
注意:大多数情况下,使用Table作为第二个选项更好,因为FITS文件存储数据的方式是大端字节序,这可能会在读入DataFrame对象(它是小端字节序)时出现问题。请参见https://github.com/astropy/astropy/issues/1156

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接