使用 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

由于是一维插值,您可以分别对每个维度进行插值。