使用 xarray 插入 dataArray 缺失数据
Interpolate dataArray missing data using xarray
我正在使用 xarray/rasterio 对一组 GeoTiff 文件进行一些操作。我正在处理的数据在某些网格点包含缺失值 (-9999)。是否有任何有效的 pythonic 方法使用 xarray 将这些值替换为插值数据?
例如我有这样的东西:
>>> da = xr.DataArray([[1.0,2.0,3.0],[4.0,-999.0,6.0],[7.0,-999.0,9.0]],[('x',[1,2,3]),('y',[1,2,3])])
>>> da
<xarray.DataArray (x: 3, y: 3)>
array([[ 1., 2., 3.],
[ 4., -9999., 6.],
[ 7., -9999., 9.]])
Coordinates:
* x (x) int64 1 2 3
* y (y) int64 1 2 3
并且我想用基于相邻网格点的插值替换 -9999 值。
任何提示将不胜感激!
您可以使用 da.interpolate_na()
对 NA 值进行一维插值 - 我不确定是否有二维方法。
您可以将 -999 值转换为 NaN,然后进行插值。
da = xr.DataArray([[1.0,2.0,3.0],[4.0,-999.0,6.0],[7.0,-999.0,9.0]],[('x',[1,2,3]),('y',[1,2,3])])
da
<xarray.DataArray (x: 3, y: 3)>
array([[ 1., 2., 3.],
[ 4., -999., 6.],
[ 7., -999., 9.]])
Coordinates:
* x (x) int64 1 2 3
* y (y) int64 1 2 3
new_da = da.where(da != -999.0, np.nan)
new_da
<xarray.DataArray (x: 3, y: 3)>
array([[ 1., 2., 3.],
[ 4., nan, 6.],
[ 7., nan, 9.]])
Coordinates:
* x (x) int64 1 2 3
* y (y) int64 1 2 3
new_da.interpolate_na(dim=('y'), method='linear')
<xarray.DataArray (x: 3, y: 3)>
array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])
Coordinates:
* x (x) int64 1 2 3
* y (y) int64 1 2 3
由于是一维插值,您可以分别对每个维度进行插值。
我正在使用 xarray/rasterio 对一组 GeoTiff 文件进行一些操作。我正在处理的数据在某些网格点包含缺失值 (-9999)。是否有任何有效的 pythonic 方法使用 xarray 将这些值替换为插值数据?
例如我有这样的东西:
>>> da = xr.DataArray([[1.0,2.0,3.0],[4.0,-999.0,6.0],[7.0,-999.0,9.0]],[('x',[1,2,3]),('y',[1,2,3])])
>>> da
<xarray.DataArray (x: 3, y: 3)>
array([[ 1., 2., 3.],
[ 4., -9999., 6.],
[ 7., -9999., 9.]])
Coordinates:
* x (x) int64 1 2 3
* y (y) int64 1 2 3
并且我想用基于相邻网格点的插值替换 -9999 值。 任何提示将不胜感激!
您可以使用 da.interpolate_na()
对 NA 值进行一维插值 - 我不确定是否有二维方法。
您可以将 -999 值转换为 NaN,然后进行插值。
da = xr.DataArray([[1.0,2.0,3.0],[4.0,-999.0,6.0],[7.0,-999.0,9.0]],[('x',[1,2,3]),('y',[1,2,3])])
da
<xarray.DataArray (x: 3, y: 3)>
array([[ 1., 2., 3.],
[ 4., -999., 6.],
[ 7., -999., 9.]])
Coordinates:
* x (x) int64 1 2 3
* y (y) int64 1 2 3
new_da = da.where(da != -999.0, np.nan)
new_da
<xarray.DataArray (x: 3, y: 3)>
array([[ 1., 2., 3.],
[ 4., nan, 6.],
[ 7., nan, 9.]])
Coordinates:
* x (x) int64 1 2 3
* y (y) int64 1 2 3
new_da.interpolate_na(dim=('y'), method='linear')
<xarray.DataArray (x: 3, y: 3)>
array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])
Coordinates:
* x (x) int64 1 2 3
* y (y) int64 1 2 3
由于是一维插值,您可以分别对每个维度进行插值。