Я читаю файлы NetCDF с open_mfdataset
, которые содержат повторяющиеся времена. Для каждого повторяющегося времени я хочу сохранить только первое вхождение и отбросить второе (это никогда не будет происходить чаще). Проблема очень похожа на этот вопрос Панд , но ни одно из представленных там решений, похоже, не работает с 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'])
Время в результирующем dataset
:
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 еще не реализовано в массивах dask
Но я не вижу, где я могу / должен установить skipna
.