Python中xArray的timedelta64对象无法与datetime.timedelta比较及转换问题
xArray时间差与datetime.timedelta比较的问题解决
问题场景
我有多个包含时间信息的xArray,想要计算时间范围:
data[0].time.max() - data[0].time.min()
这段代码返回一个单元素的xarray.DataArray:array(14393250000000, dtype='timedelta64[ns]')
但尝试和datetime.timedelta比较时:
(data[0].time.max() - data[0].time.min()) > datetime.timedelta(minutes=1)
会触发错误:TypeError: '>' not supported between instances of 'int' and 'datetime.timedelta'
尝试用.item()提取元素:
(data[0].time.max() - data[0].time.min()).item() > datetime.timedelta(minutes=1)
仍出现相同错误。
尝试手动转换为datetime.timedelta对象:
# 方法1 time_diff = np.array([data[0].time.max() - data[0].time.min()], dtype='timedelta64[ns]')[0] # 方法2 time_diff = np.array([data[0].time.max() - data[0].time.min()])[0] time_diff_dt = datetime.timedelta(microseconds=time_diff / 1000) time_diff_dt > datetime.timedelta(minutes=1)
两种方式均报错:ValueError: Could not convert object to NumPy timedelta
解决方法
方法1:通过xArray的.dt属性转换为Python timedelta
利用xArray内置的时间处理接口,先提取总秒数再转换为datetime.timedelta:
import datetime time_diff = data[0].time.max() - data[0].time.min() # 提取总秒数并转换为Python timedelta total_seconds = time_diff.dt.total_seconds().item() time_diff_dt = datetime.timedelta(seconds=total_seconds) # 执行比较 print(time_diff_dt > datetime.timedelta(minutes=1))
方法2:将Python timedelta转为numpy timedelta64类型
把阈值转换为numpy的timedelta64类型,直接和xArray计算的时间差比较:
import numpy as np import datetime # 定义1分钟的numpy timedelta阈值 threshold = np.timedelta64(1, 'm') time_diff = data[0].time.max() - data[0].time.min() # 直接比较 print(time_diff > threshold)
方法3:直接比较秒数值
分别提取时间差和阈值的总秒数,用数值比较:
import datetime time_diff_sec = (data[0].time.max() - data[0].time.min()).dt.total_seconds().item() threshold_sec = datetime.timedelta(minutes=1).total_seconds() # 数值比较 print(time_diff_sec > threshold_sec)
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

