python-xarray - 在时间维度中子集 xarray 数据集或数据数组
问题描述
我正在尝试计算 xarray 数据集中时间维度子集的每月气候学。时间使用 datetime64 定义。
如果我想使用整个时间序列,这很好用:
monthly_avr=ds_clm.groupby('time.month').mean(dim='time')
但我真的只想要比 2001 年更大的年份。这些都不起作用:
monthly_avr2=ds_clm.where(ds_clm.time>'2001-01-01').groupby('time.month').mean('time')
monthly_avr3=ds_clm.isel(time=slice('2001-01-01', '2018-01-01')).groupby('time.month').mean('time')
这是我的数据集的样子:
<xarray.Dataset>
Dimensions: (hist_interval: 2, lat: 192, lon: 288, time: 1980)
Coordinates:
* lon (lon) float32 0.0 1.25 2.5 3.75 5.0 6.25 7.5 8.75 10.0 ...
* lat (lat) float32 -90.0 -89.057594 -88.11518 -87.172775 ...
* time (time) datetime64[ns] 1850-01-31 1850-02-28 1850-03-31 ...
Dimensions without coordinates: hist_interval
Data variables:
EFLX_LH_TOT (time, lat, lon) float32 0.26219246 0.26219246 0.26219246 ...
有谁知道使用 datetime64 及时子集的正确语法?
解决方案
通过坐标值索引和选择 xarray 中的数据通常使用该sel()
方法完成。在您的情况下,类似以下示例的内容应该可以工作。
monthly_avr3 = ds_clm.sel(
time=slice('2001-01-01', '2018-01-01')).groupby('time.month').mean('time')
使用该where()
方法有时也很有用,但对于您的用例,您还需要添加drop=True
选项:
monthly_avr2 = ds_clm.where(
ds_clm['time.year'] > 2000, drop=True).groupby('time.month').mean('time')
推荐阅读
- php - Laravel Scheduler 在不同时间触发 2 个命令
- javascript - npm:执行测试用例时在 gitlab-ci.yml 文件中未发现错误
- angular - Videogular2 获取视频时长返回 NaN
- ios - 如何以编程方式获取颜色资产目录中包含的所有颜色?
- image - 使用 CDN 托管的免费图像
- excel - VBA 按日期对行进行排序
- python - 杀死python后台进程gitlab-ci
- azure - Azure 服务总线 - messageSender.SendAsync 中的第 99 个百分位缓慢
- c# - ComboBox 首先显示 System.Data.DataRowView
- android - ADB:规范中缺少端口