You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选numpy datetime数组中大于指定时间的元素?解决类型错误

解决numpy datetime64数组与Python datetime比较的类型错误

这个问题我之前也碰到过,本质是numpy的datetime64类型数组和Python原生datetime.datetime对象直接比较时的类型不兼容,numpy在尝试自动转换类型时出现了混乱,才抛出了TypeError: '>' not supported between instances of 'int' and 'datetime.datetime'这个错误。

错误原因

你的myArray是numpy的datetime64类型数组,但myDatetime是Python原生的datetime.datetime对象。当你执行myArray>myDatetime时,numpy会尝试把myDatetime转换成能和数组匹配的类型,但这个过程中意外将其转成了时间戳的整数形式,导致整数和datetime.datetime对象的无效比较。

解决方案

这里有两种简单可行的解决方法:

方法1:将Python datetime转换为numpy datetime64类型

让比较的两边类型统一为numpy的datetime64,就能正常执行筛选:

import numpy as np
import pandas as pd

myRange = pd.date_range('2018-04-09', periods=5, freq='1D20min')
myArray = np.array(myRange).astype(np.datetime64).reshape(-1,1)
myDatetime = pd.datetime(2018,4,10,2,59,59)

# 把Python datetime转成numpy datetime64类型
myDatetime_np = np.datetime64(myDatetime)
# 执行筛选
filtered_array = myArray[myArray > myDatetime_np]

print(filtered_array)

执行后会输出符合条件的元素:

[['2018-04-11T00:40:00.000000000']
 ['2018-04-12T01:00:00.000000000']
 ['2018-04-13T01:20:00.000000000']]

方法2:直接用pandas时间序列处理(更简洁)

既然你已经用了pandas生成时间范围,直接用pandas的DatetimeIndex进行筛选会更省心,完全避免类型兼容问题:

import pandas as pd

myRange = pd.date_range('2018-04-09', periods=5, freq='1D20min')
myDatetime = pd.datetime(2018,4,10,2,59,59)

# 直接筛选DatetimeIndex
filtered_range = myRange[myRange > myDatetime]
# 如果需要转成numpy数组的格式
filtered_array = filtered_range.to_numpy().reshape(-1,1)

print(filtered_array)

这种方法代码更简洁,pandas对时间序列的处理本身就比numpy更友好,推荐优先使用。

内容的提问来源于stack exchange,提问作者user7468395

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:07:58