You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现.fits文件/astropy表与pandas df的双向格式转换

实现pandas DataFrame和.fits文件双向转换最简便的方案是基于astropy.table模块实现,不需要手动编写表头解析、数据类型映射的冗余逻辑,是目前天文数据处理场景下兼容性最好、代码量最少的实现方式。

提前安装依赖即可使用,执行命令:
pip install pandas astropy


1. pandas DataFrame 导出为 .fits 文件

转换逻辑不需要逐列做类型映射,直接调用内置的转换方法即可,参考代码:

from astropy.table import Table

# df为你需要导出的pandas DataFrame对象
# 先将DataFrame转为astropy标准表对象
t = Table.from_pandas(df)
# 写入fits文件,overwrite=True参数允许覆盖路径下的同名旧文件
t.write("output_file.fits", overwrite=True)

使用注意点:

  • pandas的行索引默认不会被写入fits文件,如果需要保留索引,转换前先执行df = df.reset_index()把索引转为普通列即可
  • 转换前请把DataFrame里的Python自定义对象、混合类型object列处理为定长字符串、数值、时间戳这类固定类型,fits标准不支持存储无固定长度的混合类型对象

2. .fits 文件转换为 pandas DataFrame

读取时可以直接指定要读取的HDU扩展,转换后自动适配pandas兼容的dtype,参考代码:

from astropy.table import Table

# 读取fits文件,多扩展fits可以通过hdu参数指定要读取的扩展编号,通常表格数据存在hdu=1位置
t = Table.read("input_file.fits", hdu=1)
# 直接转为pandas DataFrame
df = t.to_pandas()

使用注意点:

  • 如果fits列自带单位、描述等元信息,转换后会保存在DataFrame对应列的attrs属性中,不会丢失
  • 对于存储为图像格式的单/二维数组fits(比如CCD成像数据),可以先读取为numpy数组后再自行构造DataFrame,这类非表格式的fits不适用上述直接转换逻辑
  • 转换过程中空值会自动适配为pandas兼容的NaN/NaT类型,不需要手动处理缺失值

内容的提问来源于stack exchange,提问作者NeStack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.14 16:15:48