【问题标题】:Read a HDF data to a 3d array and save as a dataframe in python将 HDF 数据读取到 3d 数组并在 python 中另存为数据框
【发布时间】:2021-11-14 21:30:45
【问题描述】:

我目前正在研究 NASA 气溶胶光学深度数据 (MCD19A2),这是 NASA 卫星三级产品。我已经上传了data。我想将数据保存为数据框,包括所有经度和纬度信息以及值。我已经成功地将0.47um波段文件转换成三维数组。请问如何把这个数组转换成正确的dataframe,包括X、Y和value。

以下是我尝试过的代码:

from osgeo import gdal
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

rds = gdal.Open("MCD19A2.A2006001.h26v04.006.2018036214627.hdf")
names=rds.GetSubDatasets()
names[0][0]
*'HDF4_EOS:EOS_GRID:"MCD19A2.A2006001.h26v04.006.2018036214627.hdf":grid1km:Optical_Depth_047'*
aod_047 = gdal.Open(names[0][0])
a47=aod_047.ReadAsArray()
a47[1].shape
(1200,1200)

我希望结果是这样的

X (n=1200) Y (n=1200) AOD_047
8896067 5559289 0.0123

我知道在 R 中这可以通过

require('gdalUtils')
require('raster')
require('rgdal')


file.name<-"MCD19A2.A2006001.h26v04.006.2018036214627.hdf"
sds <- get_subdatasets(file.name)
gdal_translate(sds[1], dst_dataset = paste0('tmp047', basename(file.name), '.tiff'), b = nband) 
r.047 <- raster(paste0('tmp047', basename(file.name), '.tiff'))
df.047 <- raster::as.data.frame(r.047, xy = T)
names(df.047)[3] <- 'AOD_047'

但是,R 确实依赖于内存并保存到 'tif' 并且读取 'tif' 会占用大量内存。所以我想在 python 中完成这个任务。非常感谢您的帮助。

【问题讨论】:

    标签: python arrays numpy hdf


    【解决方案1】:

    你可以使用pandas:

    import pandas as pd
    df=pd.read_hdf('filename.hdf')
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2023-02-16
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 2013-07-29
      • 2016-10-09
      • 1970-01-01
      • 2021-03-26
      相关资源
      最近更新 更多