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

如何从日、月、年三个numpy数组构建numpy.datetime64数组?

嘿,我完全懂你遇到的困扰——直接把日、月、年三个数组塞进np.datetime64()确实跑不通,毕竟官方文档里它主要支持字符串或者单个数值输入。不过别慌,有几个实用的方案能帮你把这三个分量整合成datetime64数组!

方法1:构造标准日期字符串再转换

最直观的方式就是先把三个数组格式化成统一的日期字符串(比如YYYY-MM-DD),再转成datetime64类型。numpy的字符数组操作可以轻松搞定批量拼接:

import numpy as np

# 示例数组(替换成你自己的即可)
years = np.array([2022, 2023, 2024])
months = np.array([10, 1, 12])
days = np.array([5, 8, 25])

# 把月、日补成两位数(避免出现2023-1-8这种不规范格式)
months_str = np.char.zfill(months.astype(str), 2)
days_str = np.char.zfill(days.astype(str), 2)

# 拼接成YYYY-MM-DD格式的字符串数组
date_strings = years.astype(str) + '-' + months_str + '-' + days_str

# 转换为datetime64数组
date_array = np.array(date_strings, dtype='datetime64[D]')
print(date_array)

输出结果会是:['2022-10-05' '2023-01-08' '2024-12-25'],完全符合需求。

方法2:基于基准日期计算天数差

如果你不想碰字符串,可以利用numpydatetime64的基准日(1970-01-01),先计算每个日期距离基准日的天数,再转成日期类型。这里可以用np.vectorize把单个日期的计算逻辑批量应用到数组上:

import numpy as np
from datetime import datetime

# 定义单个日期转epoch天数的函数
def get_days_since_epoch(year, month, day):
    return (datetime(year, month, day) - datetime(1970, 1, 1)).days

# 向量化函数,支持数组输入
vec_get_days = np.vectorize(get_days_since_epoch)
days_epoch = vec_get_days(years, months, days)

# 转成datetime64数组
date_array = np.array(days_epoch, dtype='datetime64[D]')
print(date_array)

这个方法绕开了字符串处理,但需要依赖Python标准库的datetime来计算天数,适合对字符串操作有顾虑的场景。

方法3:用Pandas简化操作(如果项目允许)

要是你已经在使用Pandas,那这个方法会更省心——Pandas的to_datetime直接支持传入年、月、日的数组字典,一键转换后再转成numpy数组即可:

import pandas as pd
import numpy as np

years = np.array([2022, 2023, 2024])
months = np.array([10, 1, 12])
days = np.array([5, 8, 25])

# 直接构造日期数组
date_array = pd.to_datetime({'year': years, 'month': months, 'day': days}).to_numpy()
print(date_array)

一行核心代码就能搞定,非常简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:17:57