python - 如何将浮点数组转换为 365 日历日间?(不包括闰年)
问题描述
我有一个nc
文件,其中日单位已关闭。
<xarray.DataArray 'days' (time: 6570)>
array([730817., 730818., 730819., ..., 737384., 737385., 737386.])
Dimensions without coordinates: time
Attributes:
units: days_since_Jan11900
long_name: calendar_days
我想将这些转换为日期而不考虑闰年,因为我的数据是一年 365 天的日历,这意味着数据集中没有闰年之类的东西。我试过这个
ds['days'] = ds.days - 730817
ds.days.attrs['units'] = 'days since 2001-05-30'
但是,2004 年的闰年比前三年提前了一天。因此,它从 5 月 29 日开始,但这是不正确的,因为由于一年 365 天的日历,它实际上是 5 月 30 日。我想要的是我的时间单位不断显示从 2001 年 5 月 30 日到 8 月 18 日、2002 年 5 月 30 日到 2002 年 8 月 18 日等期间,即使在闰年也是如此。所以基本上用我的范围代替:
<xarray.DataArray 'days' (time: 6570)>
array([30-05-2001, 31-05-2001, ..., 18-08-2001, ..., 18-08-2015, 30-05-2016, ...,])
我怎样才能做到这一点?
编辑我现在尝试包含@spencerkclark 的方法。
ds['days'] = ds.days - 730817
ds.days.attrs['units'] = 'days since 2001-05-30'
ds['days'].attrs['calender'] = 'noleap'
ds = xr.decode_cf(ds)
但是,我仍然在闰年得到 2 月 29 日。因此,我的最后一个日期向后移动,2099-11-02
而它应该保持在2099-12-31
. 不幸的是,所以没有完全解决。
解决方案
将日历属性添加到'days'
坐标,xarray 会将假设'noleap'
日历的时间解码为cftime.DatetimeNoLeap
对象:
ds['days'].attrs['calendar'] = 'noleap'
ds = xr.decode_cf(ds)
推荐阅读
- reactjs - 通过 React 中的文件输入从上传的视频生成缩略图
- c++ - 两个值之间的嵌入式 C 计数器
- linux - 如何使用 cURL 查询时间戳超过 30 天的所有记录?
- mysql - SQL数据库上的复杂查询以获得选举赢家
- php - jQuery AJAX 事件 preventDefault() 不适用于表单提交
- c++ - 如何将 argv 字符串更改为长整数以获得相当大的数字
- sql - 将 DatetimeOffset 数据导入 Snowflake
- mysql - SQL 查询:最近 7 天按 dancer_name 的 channel_views 和 clicks 数
- sql - 如何解决以下sql查询?
- mysql - 仅显示用户使用 mySQL 关注的用户的帖子