xarray CFTimeIndex.to_datetimeindex вне границ наносекундной метки времени - PullRequest
0 голосов
/ 13 февраля 2020

Недавно я пытался изменить месячную приповерхностную температуру воздуха в объекте времени HadCM3 NetCDF с прошлого эксперимента 1000 (с 850 г. по 1850 г.) на объект даты и времени, используя функцию xarray.CFTimeIndex.to_datetimeindex:

xr.CFTimeIndex.to_datetimeindex(tas['time'])

и получил это сообщение:

OutOfBoundsDatetime                       Traceback (most recent call last)
~/anaconda3/envs/tutorial_xarray/lib/python3.7/site-packages/xarray/coding/times.py in cftime_to_nptime(times)
    296             dt = pd.Timestamp(
--> 297                 t.year, t.month, t.day, t.hour, t.minute, t.second, t.microsecond
    298             )

pandas/_libs/tslibs/timestamps.pyx in pandas._libs.tslibs.timestamps.Timestamp.__new__()

pandas/_libs/tslibs/conversion.pyx in pandas._libs.tslibs.conversion.convert_to_tsobject()

pandas/_libs/tslibs/conversion.pyx in pandas._libs.tslibs.conversion.convert_datetime_to_tsobject()

pandas/_libs/tslibs/np_datetime.pyx in pandas._libs.tslibs.np_datetime.check_dts_bounds()

OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 850-01-16 00:00:00

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-30-7ed217c97bf1> in <module>
----> 1 xr.CFTimeIndex.to_datetimeindex(tas['time'])

~/anaconda3/envs/tutorial_xarray/lib/python3.7/site-packages/xarray/coding/cftimeindex.py in to_datetimeindex(self, unsafe)
    486         DatetimeIndex(['2000-01-01', '2000-01-02'], dtype='datetime64[ns]', freq=None)
    487         """
--> 488         nptimes = cftime_to_nptime(self)
    489         calendar = infer_calendar_name(self)
    490         if calendar not in _STANDARD_CALENDARS and not unsafe:

~/anaconda3/envs/tutorial_xarray/lib/python3.7/site-packages/xarray/coding/times.py in cftime_to_nptime(times)
    300             raise ValueError(
    301                 "Cannot convert date {} to a date in the "
--> 302                 "standard calendar.  Reason: {}.".format(t, e)
    303             )
    304         new[i] = np.datetime64(dt)

ValueError: Cannot convert date 0850-01-16 00:00:00 to a date in the standard calendar.  Reason: Out of bounds nanosecond timestamp: 850-01-16 00:00:00.

Это мой объект tas:

<xarray.DataArray 'tas' (time: 12012, lat: 73, lon: 96)>
[84180096 values with dtype=float32]
Coordinates:
  * time     (time) object 0850-01-16 00:00:00 ... 1850-12-16 00:00:00
  * lat      (lat) float64 -90.0 -87.5 -85.0 -82.5 -80.0 ... 82.5 85.0 87.5 90.0
  * lon      (lon) float64 0.0 3.75 7.5 11.25 15.0 ... 345.0 348.8 352.5 356.2
    height   float64 ...
Attributes:
    standard_name:     air_temperature
    long_name:         Near-Surface Air Temperature
    units:             K
    original_name:     mo: m01s03i236
    cell_methods:      time: mean
    cell_measures:     area: areacella
    history:           2013-03-06T13:59:55Z altered by CMOR: Treated scalar d...
    associated_files:  baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation...

, и в настоящее время я использую:

$ pip freeze | grep xarray
xarray==0.15.0

На основе предыдущий вопрос , я знаю, что временной интервал, который может быть представлен 64-разрядным целым числом, ограничен примерно 584 годами в pandas ( из которых эта функция построена поверх ).

Может ли кто-нибудь помочь мне преобразовать эти данные в объект даты и времени?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...