Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将xarray MFdataset转换为多个GeoTIFF?尝试了两种方法,但都失败了_Python_Type Conversion_Python Xarray_Netcdf4_Rasterio - Fatal编程技术网

Python 如何将xarray MFdataset转换为多个GeoTIFF?尝试了两种方法,但都失败了

Python 如何将xarray MFdataset转换为多个GeoTIFF?尝试了两种方法,但都失败了,python,type-conversion,python-xarray,netcdf4,rasterio,Python,Type Conversion,Python Xarray,Netcdf4,Rasterio,我正在尝试将多个NetCDF4文件转换为GeoTIFF光栅,同时将数据从每日频率降到每月频率(忽略NAN)。不幸的是,当我要将数据写入GeoTiff时,我会遇到错误 使用xarray(与我习惯使用的R相比,它的功能非常棒)只保留一个变量(正如我所希望的那样)并根据每日值计算每月平均值,打开和减少采样文件很容易,但我在尝试将结果导出/转换为多个*.tif文件时遇到了困难 甚至尝试将其转换为多个NetCDF3文件,因为我可以轻松地将这些文件转换为geotiff,但也失败了 输入数据为4018 ESA

我正在尝试将多个NetCDF4文件转换为GeoTIFF光栅,同时将数据从每日频率降到每月频率(忽略NAN)。不幸的是,当我要将数据写入GeoTiff时,我会遇到错误

使用xarray(与我习惯使用的R相比,它的功能非常棒)只保留一个变量(正如我所希望的那样)并根据每日值计算每月平均值,打开和减少采样文件很容易,但我在尝试将结果导出/转换为多个*.tif文件时遇到了困难

甚至尝试将其转换为多个NetCDF3文件,因为我可以轻松地将这些文件转换为geotiff,但也失败了

输入数据为4018 ESA土壤湿度“.nc4”文件,以每日频率显示,覆盖全球,但每一步都不完整(只有每天的线束充满数据,其余为空/NA),因此我希望在计算月平均值时忽略NaNs

总的来说,这4018天总共有132个月(11年),下面代码生成的我的xarray数据集似乎如预期的那样显示了这一点

import xarray as xr

# opening the files into an array

mfdataDIR = 'C:/full_path_here/*.nc'

DS = xr.open_mfdataset(mfdataDIR)


# downsampling it from daily to monthly means while keeping attributes and ignoring NAs 

monthly_data = DS.sm.resample(time="1M").mean(skipna= True, keep_attrs=True)
我在这里得到了以下警告:“默认缩减维度将在xarray 0.12之后更改为分组维度。若要消除此警告,请显式传递dim=xarray.ALL_DIMS。skipna=skipna,allow_lazy=True,**kwargs)” 不确定这是否重要,但当我打印每月的_数据时,结果似乎还可以

# Now, trying to convert to GeoTIFFs using Robin Wilson's rasterio_to_xarray (and vice-versa) script (full script can be found on link below).

import sys

sys.path.insert(0, 'C:/path_to_py_script/')

import xarray_to_rasterio as xarrast

xarrast.xarray_to_rasterio_by_band(monthly_data, 'C:/path_here/%s.tif', dim= 'time')
现在我得到了这个错误:“索引器:元组索引超出范围” 我认为错误在于我如何使用它,而不是在脚本上,尽管我不知道在哪里

罗宾·威尔逊(Robin Wilson)制作的剧本非常适合我的目标,在这里得到:

我发现错误可以追溯到第84行:

82  if len(xa.shape) == 2:
83        count = 1
84        height = xa.shape[0]
85        width = xa.shape[1]
86        band_indicies = 1
87   else:
第122行:

122  xarray_to_rasterio(data, filename)
因此,我的时间似乎很暗淡,我希望可以算作乐队,但这并不是剧本所期望的,因此,它失败了。显然,我还弄乱了“filename”参数

不知道怎么。。。我可以使用这个脚本或修改它来做我想做的事情吗? (保存132个“.tif”文件,对应132个时间维度级别)


#第二个选择并不理想,但仍然可以帮助我,如果它没有失败的话:
mDS=月度数据。至数据集()
路径=['C:/path_here/%s.nc']
xr.save_mfdataset(mDS、路径、格式='NETCDF3_CLASSIC')
出现此错误:“TypeError:save_mfdataset仅支持写入数据集对象,接收类型”
我认为我对python知识的缺乏阻碍了我的发展,因为我在这两个过程中不断出现错误(xarray到GeoTIFF或xarrayDataset到NetCDF3-classic)

当我检查每月的_数据时,我看到了我所期望的:只有“sm”变量、所有三个维度和132个时间“值”


有人能帮忙吗?

嗨,我是罗宾·威尔逊,您试图使用的代码的作者。我对这个错误有点困惑——我不太明白它是怎么发生的,但很明显它已经发生了!您是否可以包括
print(monthly_data)
print(monthly_data.shape)
的输出,因为这可能有助于我调试问题。谢谢您好,谢谢您光临@robintw!打印输出(月度数据)为:
dask.array坐标:*time(time)datetime64[ns]2007-01-31 2007-02-28。。。2017-12-31属性:长名称:体积土壤水分单位:m3 m-3有效范围:[0.1.]\u坐标系:时间纬度
,而打印(每月数据.shape)生成:
(132,)
我猜我对数组进行二次采样(向下调用)的方式有问题……嗨,我是罗宾·威尔逊,您尝试使用的代码的作者。我对这个错误有点困惑——我不太明白它是怎么发生的,但很明显它已经发生了!您是否可以包括
print(monthly_data)
print(monthly_data.shape)
的输出,因为这可能有助于我调试问题。谢谢您好,谢谢您光临@robintw!打印输出(月度数据)为:
dask.array坐标:*time(time)datetime64[ns]2007-01-31 2007-02-28。。。2017-12-31属性:长名称:体积土壤水分单位:m3 m-3有效范围:[0.1.]\u坐标:时间间隔
打印(每月数据.shape)时产生:
(132,)
我猜我对数组进行二次采样(向下调用)的方式有问题。。。

# Second option, not ideal but could still help me, if it hadn't also failed:


mDS = monthly_data.to_dataset()

paths = ['C:/path_here/%s.nc' ]
xr.save_mfdataset(mDS, paths, format='NETCDF3_CLASSIC')

got this error: "TypeError: save_mfdataset only supports writing Dataset objects, received type <class 'str'>"