首页 > 解决方案 > 将 datetime64 数组舍入到最接近的秒数

问题描述

我有一个 datetime64[ns] 类型的数组。每个元素看起来像'2019-08-30T14:02:03.684000000'. 如何将值四舍五入到最接近的秒数,以便'2019-08-30T14:02:04'在此示例中获得?

我知道我可以通过

t = t.astype('datetime64[s]')

但我特别需要对值进行舍入而不是截断它们。并且 numpy 'round' 函数似乎不喜欢 datetime64[ns] 数据类型。

标签: pythonnumpydatetimerounding

解决方案


您可以通过将 np.datetime64 转换为 datetime.datetime 来实现。

import numpy as np
from datetime import datetime, timedelta

dt64 = np.datetime64('2019-08-30T14:02:03.684000000')

# np to datetime object
ts = (dt64 - np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's')
dt = datetime.utcfromtimestamp(ts)

# Rounding
if dt.microsecond/1000000 > 0.5:
  date = (dt + timedelta(seconds=1)).replace(microsecond=0)
else:
  date = dt.replace(microsecond=0)

# Datetime to np 
date_rounded = np.datetime64(date).astype('datetime64[s]')

输出:

numpy.datetime64('2019-08-30T14:02:04')


推荐阅读