Python实现批量读取FITS文件表头并生成DataFrame需求
批量处理FITS文件并提取指定字段到DataFrame
用Python的astropy(专门处理天文FITS文件)和pandas(处理表格数据)就能搞定,新手也能快速上手。
第一步:安装依赖库
先在命令行里装需要的工具:
pip install astropy pandas glob2
第二步:完整代码实现
把下面的代码复制过去,替换你的FITS文件所在路径即可:
import os import glob from astropy.io import fits import pandas as pd # 定义要提取的表头字段(除文件名外) target_fields = ['IMAGE', 'OBJECT', 'FILTER', 'EXPTIME', 'DATE-OBS', 'RA', 'DEC'] # 存储所有文件数据的列表 all_data = [] # 遍历指定目录下的所有FITS文件(替换成你的实际路径,支持*.fits.gz这类压缩文件) for file_path in glob.glob('/your/fits/files/directory/*.fits'): # 获取纯文件名(不含路径) file_name = os.path.basename(file_path) try: # 读取FITS文件的表头信息 header = fits.getheader(file_path) # 提取目标字段,缺失字段用空值填充 row_data = {'File': file_name} for field in target_fields: row_data[field] = header.get(field, pd.NA) # 将当前文件数据加入列表 all_data.append(row_data) except Exception as e: # 处理读取失败的文件,打印错误信息但不中断程序 print(f"读取文件 {file_name} 出错: {str(e)}") # 把收集到的所有数据转换成DataFrame df = pd.DataFrame(all_data) # 可选:把结果保存成CSV文件(方便后续查看或进一步处理) df.to_csv('fits_summary.csv', index=False) # 打印前5行数据验证结果 print(df.head())
关键注意事项
- 路径替换:务必把
/your/fits/files/directory/*.fits改成你实际的FITS文件路径,比如./data/*.fits(相对路径)或D:\\fits_files\\*.fits(Windows路径注意转义) - 字段大小写:FITS表头大小写敏感,如果你的字段名是小写形式(比如
date-obs),要对应修改target_fields里的内容 - 缺失字段处理:代码中用
pd.NA填充找不到的字段,你也可以改成自定义默认值(比如'未知') - 压缩文件支持:如果是
.fits.gz格式的压缩文件,把glob匹配规则改成*.fits.gz即可,astropy会自动识别解压
内容的提问来源于stack exchange,提问作者Henrique Lima
相关产品推荐
相关产品推荐

