使用 Astropy 撤消 Table 转换

Undo Table Conversion with Astropy

我有一个带有 BinTableHDU 的 FITS 文件,其中有许多条目已从数字转换为各种单位,如伏特和电流。我想关闭此转换并访问存储在 table.

中的原始数字值

这个table利用header中的TTYPETSCALTZEROTUNIT键来完成转换.所以我可以使用这些 header 键来手动撤消转换。

undo = (converted - tzero ) / tscal 

由于 astropy.table.Tableastropy.table.QTable class 自动解释这些字段,我忍不住认为我忽略了一种使用 astropy 函数撤消的方法转换。 astropy QTable 或 Table class 中是否有属性或函数可以让我自动撤消转换。 (或者可能是另一种更简单的方法)撤消此转换?

编辑:感谢下面 Tom Aldcroft 的回答。

在我的情况下,可以使用以下代码抓取 FITS 二进制文件 table 并将其放入已转换或未转换的 pandas.DataFrame 中:

import pandas as pd
from astropy.table import Table
from astropy.io import fits

# grab converted data in various scaled values and units volts / current
converted = Table(fits.getdata(file, 2)).to_pandas()

# grab unconverted data in its original raw form
unconverted = Table(fits.getdata(file, 2)._get_raw_data()).to_pandas()

您需要使用直接 astropy.io.fits 界面而不是高级 Table 界面。从那里开始,这样的事情可能会奏效:

from astropy.io import fits
with fits.open('data.fits') as hdus:
    hdu1 = hdus[1].data
raw = hdu1._get_raw_data()

https://github.com/astropy/astropy/blob/645a6f96b86238ee28a7057a4a82adae14885414/astropy/io/fits/fitsrec.py#L1022