Python / Xarray:如何将dtype从datetime64 [ns]转换为整数(使用适当的单位)?

时间:2018-07-08 04:56:43

标签: python pandas tensorflow python-xarray

我正在使用Xarray数据集包含要输入到TensorFlow DNN中的数据,当我调用train()函数时,我最终遇到此错误:

TypeError: Cannot convert value dtype('<M8[ns]') to a TensorFlow DType.

我的假设是,这是因为数据集的时间维度/坐标变量的dtype为datetime64[ns],它映射到<M8[ns] dtype:

In [1]: np.dtype('datetime64[ns]') == np.dtype('<M8[ns]')
Out[1]: True

我想修改数据集,以使time维度/坐标变量具有整数类型,而TensorFlow可能更合适。

过去,我一直将整数类型用于时间变量以及诸如“自2000-01-01 00:00:00起的天数”之类的单位。在这种情况下,如果使用整数dtype,则由于时间步长以30分钟为增量,因此单位必须以分钟或秒为单位。

有关我当前时间变量的一些信息:

In [2]: ds['time'].coords['time']
Out[2]: <xarray.DataArray 'time' (time: 720)>
        array(['2000-12-27T00:00:00.000000000', '2000-12-27T00:30:00.000000000',
               '2000-12-27T00:59:59.000000000', ..., '2001-01-10T22:30:00.000000000',
               '2001-01-10T23:00:00.000000000', '2001-01-10T23:29:59.000000000'],
               dtype='datetime64[ns]')
        Coordinates:
          * time     (time) datetime64[ns] 2000-12-27 2000-12-27T00:30:00 ...
        Attributes:
            long_name:  time
        bounds:     time_bnds

In [3]: ds['time'].encoding
Out[3]: {'calendar': 'noleap',
         'dtype': dtype('float64'),
         'original_shape': (720,),
         'source': '/content/fv091x180L26_dry_HS.cam.h0.2000-12-27-00000.nc',
         'units': 'days since 2000-12-27 00:00:00'}

是否存在通常用于这种转换的函数,或者我只是使用timedelta等来滚动自己的函数?从NetCDF读取时,我是否可以以某种方式请求xarray将时间变量转换为更普通的内容? xarray.open_dataset()decode_times=False

提前感谢您的任何建议/见解。

0 个答案:

没有答案