从XArray数据集中的leap年中删除leap日 [英] Removing leap day from leap years in xarray dataset

查看:157
本文介绍了从XArray数据集中的leap年中删除leap日的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在xarray数据集中加载了Netcdf文件,并且我希望在不包含the日的情况下进行每日气候分析,也就是其中不包括2月29日.我正在尝试通过Dataset.drop方法>语法对我来说不是那么直观.这是数据集

I have Netcdf file loaded in an xarray dataset and I want to make daily climatologies without the leap day that is, without 29th Feb included in it. I'm trying the Dataset.drop method by the syntax is not so intuitive for me. Here is the Dataset

print(ds)
>><xarray.Dataset>
Dimensions:        (lat: 1, lev: 1, lon: 720, time: 27133)
Coordinates:
* lon            (lon) float32 -180.0 -179.5 -179.0 ... 178.5 179.0 179.5
* lev            (lev) float32 1.0
* time           (time) datetime64[ns] 2000-01-02T18:00:00 ... 2018-07-30
Dimensions without coordinates: lat
Data variables:
Var1              (time, lev, lon) float32 ...
Var2              (time, lat, lon) float64 ...
Var3              (time, lat, lon) float64 ...

我尝试了

ds_N_R.drop(['Var1', 'Var2', 'Var3'], time='2000-02-29')
>>TypeError: drop() got an unexpected keyword argument 'time'
##another approach
ds_N_R.sel(time='2000-02-29').drop(['Var1', 'Var2', 'Var3'])
## gives not the result I intended
<xarray.Dataset>
Dimensions:  (lev: 1, lon: 720, time: 4)
Coordinates:
* lon      (lon) float32 -180.0 -179.5 -179.0 -178.5 ... 178.5 179.0 179.5
* lev      (lev) float32 1.0
* time     (time) datetime64[ns] 2000-02-29 ... 2000-02-29T18:00:00
Data variables:
*empty*

我如何在这里进行?非常高兴知道是否有一种直接的方法可以通过它仅考虑一年中的365天来计算每日气候,但是我也想知道如何在需要时从特定时间段中删除数据.

How do I proceed here? It would be great to know if there is a direct method through which I can calculate daily climatologies considering only 365 days of a year but I would also like to know how to remove data from a particular time step when required.

推荐答案

在这里使用drop()的正确方法是: ds_N_R.drop([np.datetime64('2000-02-29')], dim='time')

The right way to use drop() here would be: ds_N_R.drop([np.datetime64('2000-02-29')], dim='time')

但是我认为实际上可以通过索引操作更干净地完成此操作,例如, ds_N_R.sel(time=~((ds_N_R.time.dt.month == 2) & (ds_N_R.time.dt.day == 29)))

But I think this could actually be more cleanly done with an indexing operation, e.g., ds_N_R.sel(time=~((ds_N_R.time.dt.month == 2) & (ds_N_R.time.dt.day == 29)))

这篇关于从XArray数据集中的leap年中删除leap日的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆