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

如何从datetime64数组中获取一年中的第几天?

嘿,这问题我熟!给你两种靠谱的解决办法,一种是Numpy原生的高效方案(处理大数据组首选),另一种就是你问到的用timetuple().tm_yday的方式,按需选择就行~

解决方案

假设你的原始数组是这样的:

import numpy as np

# 你的datetime64数组
dates = np.array(['1980-01-01T00:00:00.000000000', '1980-01-02T00:00:00.000000000', '1989-12-31T00:00:00.000000000'], dtype='datetime64[ns]')

方法一:Numpy原生高效实现(推荐)

Numpy本身对datetime64类型有很好的支持,不需要转成Python原生datetime对象就能快速计算一年中的第几天,效率拉满:

# 获取每个日期对应的当年第一天(精度到年)
year_starts = dates.astype('datetime64[Y]')
# 计算当前日期与当年第一天的天数差,加1就是一年中的第几天
day_of_year = (dates - year_starts) / np.timedelta64(1, 'D') + 1
# 转成整数类型,结果更规整
day_of_year = day_of_year.astype(int)

运行后你会得到:array([ 1, 2, 365]),完全符合预期——而且这种方法能自动处理闰年(比如1980年是闰年,2月29日会被计算为第60天)。

方法二:使用timetuple().tm_yday实现

如果一定要用timetuple().tm_yday,需要先把Numpy的datetime64元素转成Python原生的datetime对象,再调用方法:

# 把Numpy datetime数组转成Python datetime对象的列表
py_dates = dates.astype(object).tolist()
# 遍历每个日期,提取tm_yday
day_of_year = np.array([d.timetuple().tm_yday for d in py_dates])

或者用np.vectorize简化写法:

get_yday = np.vectorize(lambda d: d.timetuple().tm_yday)
day_of_year = get_yday(dates.astype(object))

⚠️ 注意:这种方法的效率比Numpy原生方案低很多,如果你的数组规模很大(比如上百万条数据),不建议用这个。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:47:39