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

如何将多个整数类型NumPy数组转换为指定格式化字符串的NumPy数组

超大范围日期数组向量化格式化解决方案

方案1:原生向量化实现(性能最优)

使用NumPy内置的numpy.char.mod函数即可实现需求,该函数是原生向量化实现,对标Python原生的%格式化语法,不需要依赖任何日期处理库,完美支持公元前年份。

import numpy as np

# 示例输入
years  = np.array([-1000, 0, 1000, 2000])
months = np.array([1, 2, 3, 5])
days   = np.array([1, 11, 21, 31])

# 向量化格式化,%02i和你要求的%2.2i效果完全一致,不足两位自动补前导零
datestr_array = np.char.mod('%i-%02i-%02i', np.stack([years, months, days], axis=1))

运行后输出结果为:

array(['-1000-01-01', '0-02-11', '1000-03-21', '2000-05-31'], dtype='<U11')

完全符合格式要求。

方案2:灵活自定义实现(兼容性好)

如果需要后续修改格式化规则,或者使用的NumPy版本较老,可以用np.vectorize包装标量格式化逻辑,代码如下:

import numpy as np

years  = np.array([-1000, 0, 1000, 2000])
months = np.array([1, 2, 3, 5])
days   = np.array([1, 11, 21, 31])

def format_date(y, m, d):
    return '%i-%02i-%02i' % (y, m, d)

# 生成向量化函数
v_format_date = np.vectorize(format_date)
datestr_array = v_format_date(years, months, days)

注意事项

  • 两种方案都不依赖Python内置datetime和Pandas的DateTimeIndex,支持的年份范围无限制,完全覆盖公元前2000年到公元3000年的需求。
  • 性能上方案1远优于方案2,处理百万级以上数据优先选择方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:24:04