date - 如何舍入 Pandas `DatetimeIndex` ?

标签 date datetime numpy pandas date-format

我有一个 pandas.DatetimeIndex ,例如:

pd.date_range('2012-1-1 02:03:04.000',periods=3,freq='1ms')
>>> [2012-01-01 02:03:04, ..., 2012-01-01 02:03:04.002000]

我想将日期( Timestamp s)四舍五入到最接近的秒。我怎么做?预期结果类似于:
[2012-01-01 02:03:04.000000, ..., 2012-01-01 02:03:04.000000]

是否可以通过舍入 Numpy datetime64[ns] 来实现此目的到秒而不改变 dtype [ns] ?
np.array(['2012-01-02 00:00:00.001'],dtype='datetime64[ns]')

最佳答案

更新:如果您对 DatetimeIndex/datetime64 列执行此操作,更好的方法是使用 np.round直接而不是通过应用/映射:

np.round(dtindex_or_datetime_col.astype(np.int64), -9).astype('datetime64[ns]')

旧答案(有更多解释):

虽然@Matti 的答案显然是处理您的情况的正确方法,但我想我会添加一个答案,您可以如何将时间戳舍入到最近的秒数:
from pandas.lib import Timestamp

t1 = Timestamp('2012-1-1 00:00:00')
t2 = Timestamp('2012-1-1 00:00:00.000333')

In [4]: t1
Out[4]: <Timestamp: 2012-01-01 00:00:00>

In [5]: t2
Out[5]: <Timestamp: 2012-01-01 00:00:00.000333>

In [6]: t2.microsecond
Out[6]: 333

In [7]: t1.value
Out[7]: 1325376000000000000L

In [8]: t2.value
Out[8]: 1325376000000333000L

# Alternatively: t2.value - t2.value % 1000000000
In [9]: long(round(t2.value, -9)) # round milli-, micro- and nano-seconds
Out[9]: 1325376000000000000L

In [10]: Timestamp(long(round(t2.value, -9)))
Out[10]: <Timestamp: 2012-01-01 00:00:00>

因此,您可以将其应用于整个索引:
def to_the_second(ts):
    return Timestamp(long(round(ts.value, -9)))

dtindex.map(to_the_second)

关于date - 如何舍入 Pandas `DatetimeIndex` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13785932/

相关文章:

python - 生成某个范围内递增 0.1 的连续数字列表

Php:将可变天数添加到 Y-m-d 日期格式

javascript - 在 Angular JS 中格式化时间戳

performance - 如何优化在日期的 where 子句中具有 to_char 的 Oracle 查询

java - 根据字符串选择日期格式

java - 如何将 ISO 8601 日期时间字符串转换为 java.util.LocalDateTime?

C#、日期时间格式、mont 名称、cultureinfo

php date->diff() 返回无意义的金额

numpy - 创建元素在范围内的二维 numpy 数组的最快方法

python - 如何找到自己的行和列中最大的值?