我正在使用
要复制此问题:
生成的
有没有一种简单的方法可以删除第二次出现的
open_mfdataset
读取包含重复时间的NetCDF文件。对于每个重复的时间,我只想保留第一次出现,并删除第二次出现(它永远不会再次出现)。这个问题与这个Pandas问题非常相似,但是那里提供的解决方案似乎都无法在Xarray中工作。要复制此问题:
import numpy as np
import netCDF4 as nc4
import xarray as xr
# Create example NetCDF files
for t in range(2):
nc = nc4.Dataset('test{}.nc'.format(t), 'w')
dim_t = nc.createDimension('time', None)
var_t = nc.createVariable('time', 'f8', ('time',))
var_s = nc.createVariable('var', 'f8', ('time',))
var_t.setncattr('units', 'hours since 2001-01-01 00:00:00')
var_t[:] = t*5+np.arange(6)
var_s[:] = t*5+np.arange(6)+t
nc.close()
# Read with xarray
f = xr.open_mfdataset(['test0.nc', 'test1.nc'])
生成的
数据集
中的时间为:array(['2001-01-01T00:00:00.000000000', '2001-01-01T01:00:00.000000000',
'2001-01-01T02:00:00.000000000', '2001-01-01T03:00:00.000000000',
'2001-01-01T04:00:00.000000000', '2001-01-01T05:00:00.000000000',
'2001-01-01T05:00:00.000000000', '2001-01-01T06:00:00.000000000',
'2001-01-01T07:00:00.000000000', '2001-01-01T08:00:00.000000000',
'2001-01-01T09:00:00.000000000', '2001-01-01T10:00:00.000000000'], dtype='datetime64[ns]')
有没有一种简单的方法可以删除第二次出现的
2001-01-01T05:00:00.000000000
?实际问题涉及多维NetCDF文件,因此切换到Pandas不是选择。[更新]我得到的最接近的答案是遵循这个答案; 只要不使用Dask,这对我的简单示例有效,如果文件包含Dask数组,则会出现错误:
但我不知道在哪里可以/必须设置'last' with skipna=True is not yet implemented on dask arrays
skipna
。
xr.open_mfdataset
时重复时间条目的问题,而这个解决方案完美地解决了它。 - drg