如何将操纵的数据从.fits文件转换为pandas DataFrame

时间:2019-09-29 17:42:01

标签: python pandas astropy fits

我有一个包含一些数据的.fits文件,从中进行了一些操作,并希望将新数据(而不是整个.fits文件)存储为pd.DataFrame。数据来自名为pabdatazcut.fits的文件。

<div id="container">
  <span id="label">current Option</span>
  <div id="inner-container">
    <div onclick="setoption('test1')" class="option">test1</div>
    <div onclick="setoption('test2')" class="option">test2</div>
  </div>
</div>

<div id="output">select</div>

''''

当我尝试运行此错误消息时,我收到了“ TypeError:列表索引必须是整数或切片,而不是str”错误消息。

1 个答案:

答案 0 :(得分:1)

您之所以得到这个,是因为我猜是像sortedpab['ID']这样的访问。根据文档sorted返回排序列表。列表不接受字符串作为id来访问元素。只能通过整数位置或切片访问它们。那就是错误要告诉你的。

不幸的是,由于我没有您的数据,所以我无法在计算机上对此进行测试,但是我想,您真正想要做的是这样的事情:

data_dict= dict()
for obj in sortedpab:
    for key in ['FIELD', 'ID', 'Z_50', 'Z_50', 'Z_ERR', 'Z_84', 'PAB_FLUX', 'PAB_FLUX_ERR']:
        data_dict.setdefault(key, list()).append(obj[key])

sortedpabdf = pd.DataFrame(data_dict)
# maybe you don't even need to create the data_dict but
# can pass the sortedpad directly to your data frame
# have you tried that already?
#
# then I would calculate the columns which are not just copied
# in the dataframe directly, as this is more convenient
# like this:
sortedpabdf['Z_ERR']= ((sortedpabdf['Z_84'] - sortedpabdf['Z_50']) + (sortedpabdf['Z_50'] - sortedpabdf['Z_16'])) / (2 * sortedpabdf['Z_50'])
sortedpabdf['$\lambda Pa\beta$']= 12820 * (1 + sortedpabdf['Z_50']),

sortedpabdf.rename({
        'PAB_FLUX': '$Pa\beta$ FLUX', 
        'PAB_FLUX_ERR': '$Pa\beta$ FLUX ERR'
    }, axis='columns', inplace=True)

cols_to_delete= [col for col in sortedpabdf.columns if col not in ['FIELD', 'ID', 'Z_50', 'Z_ERR', '$\lambda Pa\beta$', '$Pa\beta$ FLUX','$Pa\beta$ FLUX ERR'])
sortedpabdf.drop(cols_to_delete, axis='columns', inplace=True)