xarray 中是否有 DataArray.sel(time = slice(x, y)) 的另一种替代方法?
Is there another alternative to DataArray.sel(time = slice(x, y)) in xarray?
出于某种原因,DataArray.sel(time = slice(x, y)) 在 1 月到 6 月期间对我来说没有任何问题,其中 x 和 y 都等于范围内的值从一月的 1 到六月的 6。但是,这种方法不适用于 7 月到 12 月。我已经检查了输入数据,它是一个 netCDF4 文件并且没有损坏。因此,我正在寻找一种替代方法来代替 xarray 中的 DataArray.sel(time = slice(x, y)) 来提取 7 月至 12 月的数据。
代码如下:
import xarray as xr
td = xr.open_dataset(r'C:\Users\abc\Desktop\misc\netcdf_to_geotiff\ECLIPSEv5_monthly_patterns.nc')
td_agr = td.agr
td_agrtime = td_agr.sel(time = slice('1', '1'))
给出输出:
In [7]: td_agrtime
Out[7]:
<xarray.DataArray 'agr' (time: 1, lat: 360, lon: 720)>
[259200 values with dtype=float64]
Coordinates:
* lat (lat) float64 -89.75 -89.25 -88.75 -88.25 ... 88.75 89.25
89.75
* lon (lon) float64 -179.8 -179.2 -178.8 -178.2 ... 178.8 179.2
179.8
* time (time) int32 1
Attributes:
long_name: Monthly weights - Agriculture (animals, rice, soil)
sector: Agriculture (animals, rice, soil)
如果把代码中的1改成7如下:
td_agrtime = td_agr.sel(time = slice('7', '7')
输出是:
In [7]: td_agrtime
Out[9]:
<xarray.DataArray 'agr' (time: 6, lat: 360, lon: 720)>
[1555200 values with dtype=float64]
Coordinates:
* lat (lat) float64 -89.75 -89.25 -88.75 -88.25 ... 88.75 89.25
89.75
* lon (lon) float64 -179.8 -179.2 -178.8 -178.2 ... 178.8 179.2
179.8
* time (time) int32 7 8 9 10 11 12
Attributes:
long_name: Monthly weights - Agriculture (animals, rice, soil)
sector: Agriculture (animals, rice, soil)
感谢罗伯特戴维的评论。答案是使用.isel()
,而不是.sel()
。
出于某种原因,DataArray.sel(time = slice(x, y)) 在 1 月到 6 月期间对我来说没有任何问题,其中 x 和 y 都等于范围内的值从一月的 1 到六月的 6。但是,这种方法不适用于 7 月到 12 月。我已经检查了输入数据,它是一个 netCDF4 文件并且没有损坏。因此,我正在寻找一种替代方法来代替 xarray 中的 DataArray.sel(time = slice(x, y)) 来提取 7 月至 12 月的数据。
代码如下:
import xarray as xr
td = xr.open_dataset(r'C:\Users\abc\Desktop\misc\netcdf_to_geotiff\ECLIPSEv5_monthly_patterns.nc')
td_agr = td.agr
td_agrtime = td_agr.sel(time = slice('1', '1'))
给出输出:
In [7]: td_agrtime
Out[7]:
<xarray.DataArray 'agr' (time: 1, lat: 360, lon: 720)>
[259200 values with dtype=float64]
Coordinates:
* lat (lat) float64 -89.75 -89.25 -88.75 -88.25 ... 88.75 89.25
89.75
* lon (lon) float64 -179.8 -179.2 -178.8 -178.2 ... 178.8 179.2
179.8
* time (time) int32 1
Attributes:
long_name: Monthly weights - Agriculture (animals, rice, soil)
sector: Agriculture (animals, rice, soil)
如果把代码中的1改成7如下:
td_agrtime = td_agr.sel(time = slice('7', '7')
输出是:
In [7]: td_agrtime
Out[9]:
<xarray.DataArray 'agr' (time: 6, lat: 360, lon: 720)>
[1555200 values with dtype=float64]
Coordinates:
* lat (lat) float64 -89.75 -89.25 -88.75 -88.25 ... 88.75 89.25
89.75
* lon (lon) float64 -179.8 -179.2 -178.8 -178.2 ... 178.8 179.2
179.8
* time (time) int32 7 8 9 10 11 12
Attributes:
long_name: Monthly weights - Agriculture (animals, rice, soil)
sector: Agriculture (animals, rice, soil)
感谢罗伯特戴维的评论。答案是使用.isel()
,而不是.sel()
。