如何在Python中读取含卫星数据的H5文件并提取带位置的GHI数据至CSV
解决H5卫星数据提取X/Y/GHI到CSV的问题
核心思路
H5文件中Geo2D格式的GHI数据,对应的位置信息(X/Y,通常为经纬度)一般以独立数据集存储。只需将位置数据与GHI数据做维度匹配后展平,再合并成结构化表格即可导出CSV。
步骤与代码实现
- 确认H5文件结构:通过Panoply查看GHI、X、Y对应的数据集路径(比如GHI可能在
/PRODUCT/GHI,经度X在/PRODUCT/lon,纬度Y在/PRODUCT/lat)。 - 读取并处理数据:用
h5py读取数据集,若X/Y是一维数组,用meshgrid生成和GHI同维度的二维网格,再将所有数组展平后关联。
import h5py import numpy as np import pandas as pd # 替换为你的H5文件路径 h5_file_path = "satellite_data.h5" with h5py.File(h5_file_path, 'r') as hf: # 替换为Panoply中查到的实际数据集路径 ghi = hf['/PRODUCT/GHI'][()] lon = hf['/PRODUCT/lon'][()] # X对应经度 lat = hf['/PRODUCT/lat'][()] # Y对应纬度 # 处理一维位置数据:生成二维网格匹配GHI维度 if lon.ndim == 1 and lat.ndim == 1: lon_grid, lat_grid = np.meshgrid(lon, lat) else: lon_grid = lon lat_grid = lat # 展平所有数组,确保数据一一对应 x_flat = lon_grid.flatten() y_flat = lat_grid.flatten() ghi_flat = ghi.flatten() # 生成CSV df = pd.DataFrame({ 'X': x_flat, 'Y': y_flat, 'GHI': ghi_flat }) # 可选:过滤无效值(比如填充的-9999) # df = df[df['GHI'] != -9999] df.to_csv('ghi_data.csv', index=False)
关键注意事项
- 必须替换代码中的数据集路径:严格按照Panoply中显示的层级填写,比如如果Panoply里GHI在
/Geophysical_Data/GHI,就把/PRODUCT/GHI改成对应路径。 - 若X/Y本身就是二维数组(和GHI维度一致),跳过
meshgrid步骤直接展平即可。 - 部分卫星数据会用特殊值标记无效数据,导出前可根据实际情况过滤。
内容的提问来源于stack exchange,提问作者Rishikesh Sreehari
相关产品推荐
相关产品推荐

