pydata / xarray

N-D labeled arrays and datasets in Python
https://xarray.dev
Apache License 2.0
3.57k stars 1.07k forks source link

Time conversion overflow with minutes #1395

Closed snowman2 closed 7 years ago

snowman2 commented 7 years ago
  File "/var/lib/miniconda/envs/gssha/lib/python2.7/site-packages/xarray/backends/api.py", line 515, in open_mfdataset
    **kwargs) for p in paths]
  File "/var/lib/miniconda/envs/gssha/lib/python2.7/site-packages/xarray/backends/api.py", line 310, in open_dataset
    return maybe_decode_store(store, lock)
  File "/var/lib/miniconda/envs/gssha/lib/python2.7/site-packages/xarray/backends/api.py", line 226, in maybe_decode_store
    drop_variables=drop_variables)
  File "/var/lib/miniconda/envs/gssha/lib/python2.7/site-packages/xarray/conventions.py", line 951, in decode_cf
    decode_coords, drop_variables=drop_variables)
  File "/var/lib/miniconda/envs/gssha/lib/python2.7/site-packages/xarray/conventions.py", line 884, in decode_cf_variables
    decode_times=decode_times)
  File "/var/lib/miniconda/envs/gssha/lib/python2.7/site-packages/xarray/conventions.py", line 821, in decode_cf_variable
    data = DecodedCFDatetimeArray(data, units, calendar)
  File "/var/lib/miniconda/envs/gssha/lib/python2.7/site-packages/xarray/conventions.py", line 398, in __init__
    raise ValueError(msg)
ValueError: unable to decode time units u'minutes since 2011-03-05 03:00:00' with the default calendar. Try opening your dataset with decode_times=False. Full traceback:
Traceback (most recent call last):
  File "/var/lib/miniconda/envs/gssha/lib/python2.7/site-packages/xarray/conventions.py", line 389, in __init__
    result = decode_cf_datetime(example_value, units, calendar)
  File "/var/lib/miniconda/envs/gssha/lib/python2.7/site-packages/xarray/conventions.py", line 157, in decode_cf_datetime
    dates = _decode_datetime_with_netcdf4(flat_num_dates, units, calendar)
  File "/var/lib/miniconda/envs/gssha/lib/python2.7/site-packages/xarray/conventions.py", line 99, in _decode_datetime_with_netcdf4
    dates = np.asarray(nc4.num2date(num_dates, units, calendar))
  File "netCDF4/_netCDF4.pyx", line 5358, in netCDF4._netCDF4.num2date (netCDF4/_netCDF4.c:66601)
OverflowError: Python int too large to convert to C long
fmaussion commented 7 years ago

It would be nice to have some more context!

But the error message leads to a NetCDF4 issue, not necessarily an xarray one. Did you try to decode your times with netCDF4 only?

snowman2 commented 7 years ago

I did a

$ ncdump -v time file.nc

And I got:

...
    float time(time) ;
        time:units = "minutes since 2011-03-05 03:00:00" ;
        time:long_name = "time" ;
        time:time_increment = "10800" ;
        time:begin_date = "20110305" ;
        time:begin_time = "030000" ;
...
data:

 time = _ ;
}

So, it looks like a bad file ...