如何在NumPy数组中筛选出距今不足两年的日期对应布尔数组
现有代码的核心错误在于:Python原生datetime对象与numpydatetime64对象做减法得到的是numpytimedelta64类型,该类型没有years属性,无法直接通过.years获取间隔年数。
正确实现代码如下:
import numpy as np from datetime import datetime np_arr = np.array([ [2818, 'Daniel', 'within an hour', '2008-09-24', 4.89, 2.86, 't', 't'], [5820, 'Sam', 'within an week', '2020-10-24', 4.89, 2.86, 't', 't'], [5420, 'Franc', 'within an second', '2019-11-24', 4.89, 2.86, 't', 't'], [5520, 'Sandra', 'within an second', '2019-01-24', 4.89, 2.86, 't', 't'] ]) # 提取日期列转换为numpy datetime64格式 host_since = np_arr[:,3].astype(np.datetime64) # 计算两年前的日期节点,此处精确到月和原代码逻辑对齐 two_years_ago = np.datetime64('today', 'M') - np.timedelta64(2, 'Y') # 生成布尔过滤数组,reshape为二维匹配期望的输出格式 filter_arr = (host_since >= two_years_ago).reshape(1, -1) print(filter_arr)
运行后输出结果和期望一致:
array([[False, True, True, False]])
实现逻辑说明:统一使用numpy原生的时间类型做运算,直接将所有日期与两年前的基准日期做大小比较,得到对应的布尔值,最后调整数组维度匹配输出要求即可。
内容的提问来源于stack exchange,提问作者Mr. Hankey
相关产品推荐
相关产品推荐

