我从fit文件中读取数据时遇到问题。通常我可以从fit文件中读取数据就好了,但现在我有一些数据文件给了我一些问题。 当我尝试读取应该包含三列和一个标题的文件时,我得到的是一个数字表,看起来像这样:
[[64 195 45 ...,0 0 0]]
现在这是整数,数据文件确实应该包含三列,包含三列中的double和float,如下所示:
[9819.3801,0.00000,0.00000]
[9820.0025,5.50764e-16,1.62396e-16]
[820.6248,-3.75781e-17,1.51864e-16]
我知道我应该获取这些值,因为IDL中名为mrdfits的包可用于检索值。我已经尝试查看适合文件包含哪些数据类型以及哪些格式,我的代码如下所示:
f=pyfits.open('filename')
dat =f[1].data
print f.info
>> No. Name Type Cards Dimensions Format
>> 0 PRIMARY PrimaryHDU 4 () uint8
>> 1 PRIMARY PrimaryHDU 576 (156288, 1) uint8
>> None
print pyfits.getval('filename','xtension',1)
>> BINTABLE
print dat
>> [[ 64 195 45 ..., 0 0 0]]
我的问题基本上是;还有另一种方法我可以读取数据,以便它给我三列非整数数据?我想知道是不是因为文件是BINTABLE,它以不同的方式读取?有没有其他方法可以加载三列而不是我现在做的? 如果你需要我澄清一些问题,请问,因为我现在尝试了很多事情,我不确定采取哪个方向。 任何帮助将不胜感激!
答案 0 :(得分:0)
下载PyFITS后,您就可以开始了!要使用PyFITS并从FITS文件中获取信息,下面是一个使用三列的小示例。
import pyfits
# Load the FITS file into the program
hdulist = pyfits.open('Your FITS file name here')
# Load table data as tbdata
tbdata = hdulist[1].data
fields = ['J','H','K'] #This contains your column names
var = dict((f, tbdata.field(f)) for f in fields) #Creating a dictionary that contains
#variable names J,H,K
#Now to call column J,H and K just use
J = var['J']
H = var['H']
K = var['K']
现在上面的示例有三列,标题为J,H,K
。您现在可以分别通过J,H,K
来调用它们。
您在代码中所做的是打印f.info
,它只会为您提供FITS文件的标题和其他内容的信息。它不会打印列和信息。