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

如何复制指定HDF5结构保存天文数据(从Pandas DataFrame出发)

问题描述

我有如下格式的天文数据:

M200c, M200m, dec, ra
19.4,  20.4,  1.33, 4.68
...

需要将其保存为HDF5格式以适配指定脚本。已知目标HDF5的结构来自示例文件,结构如下:

import nexusformat.nexus as nx
f = nx.nxload('example_input_file.hdf5')
print(f.tree)

>>> root:NXroot
>>>  Data:NXgroup
>>>    M200c = float32(735697)
>>>    M200m = float32(735697)
>>>    dec = float32(735697)
>>>    ra = float32(735697)

我尝试将数据加载到Pandas DataFrame后用以下代码保存:

import pandas as pd

df ... # 数据加载与处理步骤
df.to_hdf('my_data_input_file.hdf5', key='df', mode='w') 

但Pandas生成的HDF5结构复杂且不符合要求,导致脚本报错:KeyError: Unable to open object (component not found)。

请问是否有工具/包可以复制示例HDF5的结构并保存数据?或者提供硬编码方案,比如循环列名填充空HDF5?我刚接触该格式,求指导。

解决方案

方案1:使用nexusformat包(推荐,匹配示例结构)

因为示例文件本身是用nexusformat读取的,直接用这个包构建结构最贴合需求:

import nexusformat.nexus as nx
import pandas as pd

# 1. 加载数据到DataFrame
df = pd.read_csv('your_data.csv')  # 替换为你的数据文件路径

# 2. 创建NXroot和Data组
root = nx.NXroot()
root['Data'] = nx.NXgroup()

# 3. 将DataFrame的列转换为float32类型并写入对应组
for col in ['M200c', 'M200m', 'dec', 'ra']:
    # 转换为float32,匹配示例中的数据类型
    data = df[col].astype('float32').values
    root['Data'][col] = data

# 4. 保存HDF5文件
nx.nxsave('my_data_input_file.hdf5', root, mode='w')

这段代码会完全复刻示例中的结构:根节点是NXroot,下一级是Data组,组内包含四个float32类型的数据集。

方案2:使用h5py硬编码构建结构

如果你不想依赖nexusformat,可以用更底层的h5py包手动构建结构:

import h5py
import pandas as pd

# 1. 加载数据
df = pd.read_csv('your_data.csv')

# 2. 创建HDF5文件并构建结构
with h5py.File('my_data_input_file.hdf5', 'w') as f:
    # 创建Data组
    data_group = f.create_group('Data')
    
    # 循环写入每个列,指定数据类型为float32
    for col in ['M200c', 'M200m', 'dec', 'ra']:
        data = df[col].astype('float32').values
        data_group.create_dataset(col, data=data, dtype='f4')  # f4对应float32

验证结构是否正确

可以用nexusformat或者h5py读取生成的文件验证:

# 用nexusformat验证
import nexusformat.nexus as nx
f = nx.nxload('my_data_input_file.hdf5')
print(f.tree)

输出应该和示例的结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:50:26