【问题标题】:Xarray time coordinate from integer to datetimeXarray 时间坐标从整数到日期时间
【发布时间】:2022-10-14 14:17:27
【问题描述】:

我有一个用 xarray 读入的 NetCDF 数据文件。

import pandas as pd
import xarray as xr
import numpy as np
dataDIR = myNetCDFdatafile
DS = xr.open_dataset(dataDIR)
DS

显示数据集的结构:

如你看到的。 time 是 int32 类型。这个整数表示自 1970-01-01 以来的秒数时间戳。这个时间戳的周期不是等距的。

如何将其转换为日期时间类型?

如果我尝试 numpy 方式

DS.time = DS.time.astype('datetime64')

我确实得到了一个

ValueError: datetime64/timedelta64 must have a unit specified

有什么提示吗?

【问题讨论】:

  • “datetime64/timedelta64 必须指定一个单位”是一个相当不错的提示 :) 请参阅datetime units 上的 numpy 文档。 time 上的单位是什么?如果没有编码信息,numpy 不知道如何处理这些值。属性中可能有线索-您可以访问ds.time.attrs 或单击xarray 预览中的小属性页面图标以查看是否有单位和日历的描述?
  • @MichaelDelgado 对迟到的回复感到抱歉:电晕让我失望了...ds.time.attrs 结果:(时间)int32。我的目标是像 YYYY-MM-DD hh:mm:ss 这样的日期格式。还有比strftime更直接的方法吗?

标签: netcdf python-xarray dtype


【解决方案1】:

你知道这些时间值代表什么吗?例如 1647475208? 有时这种值表示从 X 日期开始的秒数或天数。如果您知道时间变量的最小值、最大值和频率,则可以使用 pd.data_range()

像这样的东西:

ds['time'] = pd.date_range('2001-01-01', '2010-12-31', freq = 'D') #for a daily interval for example

【讨论】:

  • '@Ruben-Calvo:谢谢。时间值代表自 01.01.1970 以来的秒数。频率通常是几秒钟,但并非总是一整天都等间隔:有时会缺少几秒钟……我会试试你的建议。我没有找到一个解决方案如何告诉熊猫这个时期不是等距的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 2021-12-21
  • 2015-02-14
  • 2019-06-25
  • 1970-01-01
相关资源
最近更新 更多