![](/img/trans.png)
[英]Xarray merge separate day and hour dimensions into one time dimension in python
[英]use time without date as one dimension in xarray
我有一個 xarray.DataArray,我成功地將一個暗淡設置為一天的時間。
tmp.dims
('ITEM', 'DATE', 'TIME', 'CODE')
tmp.TIME
<xarray.DataArray 'TIME' (TIME: 15)>
array([datetime.time(14, 15), datetime.time(14, 16), datetime.time(14, 17),
datetime.time(14, 18), datetime.time(14, 19), datetime.time(14, 20),
datetime.time(14, 21), datetime.time(14, 22), datetime.time(14, 23),
datetime.time(14, 24), datetime.time(14, 25), datetime.time(14, 26),
datetime.time(14, 27), datetime.time(14, 28), datetime.time(14, 29)],
dtype=object)
tmp.TIME.values[0]
datetime.time(14, 15)
但我無法將此 xarray 保存到此錯誤中:
tmp.to_netcdf('/sdata/user/tsu/tmp/srpd.nc')
*** ValueError: unable to infer dtype on variable 'TIME'; xarray cannot serialize arbitrary Python objects
這樣使用 datetime.time 有錯嗎?
而不是使用 python datetime
時間對象的列表,而是使用來自timedelta
或 Z3A43B4F883925D94022CFAFFA2 的 timedelta arrays 請參閱有關使用時間序列數據的 pandas 文檔。
對於按一天中的小時而不是特定日期索引的數據,我建議使用pd.to_timedelta
,如下例所示:
In [9]: da = xr.DataArray(
...: np.ones(16).reshape(4, 4),
...: dims=['x', 'hour'],
...: coords=[range(4), pd.to_timedelta(range(4), unit='h')],
...: )
...:
In [10]: da
Out[10]:
<xarray.DataArray (x: 4, hour: 4)>
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
Coordinates:
* x (x) int64 0 1 2 3
* hour (hour) timedelta64[ns] 00:00:00 01:00:00 02:00:00 03:00:00
In [11]: da.hour
Out[11]:
<xarray.DataArray 'hour' (hour: 4)>
array([ 0, 3600000000000, 7200000000000, 10800000000000],
dtype='timedelta64[ns]')
Coordinates:
* hour (hour) timedelta64[ns] 00:00:00 01:00:00 02:00:00 03:00:00
請注意,這可以毫無問題地寫入 netCDF:
In [12]: da.to_dataset(name='myarr').to_netcdf('sample.nc')
In [13]: xr.open_dataset('sample.nc')
Out[13]:
<xarray.Dataset>
Dimensions: (x: 4, hour: 4)
Coordinates:
* x (x) int64 0 1 2 3
* hour (hour) timedelta64[ns] 00:00:00 01:00:00 02:00:00 03:00:00
Data variables:
myarr (x, hour) float64 ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.