Python:将时间四舍五入到最接近的秒和分钟

1 投票
2 回答
7642 浏览
提问于 2025-04-17 20:54

我有一个叫做 DataFrame 的数据表,其中有一列叫做 Timestamp,这个列里的每个值表示从午夜开始经过的秒数,精确到纳秒。举个例子:

Timestamp
34200.984537482
34201.395432198

比如说,34200秒就是早上9点30分。

我想在我的 dataframe 中新增两列,分别叫做 SecondMinute,其中 Timestamp 的值会被四舍五入到最近的秒和分钟(向前看)。所以

Timestamp         Second           Minute
34200.984537482   34201            34260
34201.395432198   34202            34260 

我该如何在Python中实现这个呢?另外,我应该使用Pandas的 DateTimeIndex 吗?因为一旦我把时间四舍五入后,我还想计算每个时间戳之间的时间差,所以也许使用 DateTimeIndex 更合适。

2 个回答

2

如果你想要得到最接近的秒数,可以使用 math.ceil 这个函数,像这样:

    import math
    second = math.ceil(timestamp)

如果你想要得到最接近的分钟,先把数字除以 60.0,然后四舍五入,最后再乘以 60。

4

这里有一个Series的round方法:

In [11]: df.Timestamp.round()
Out[11]: 
0    34201
1    34201
Name: Timestamp, dtype: float64

In [12]: df.Timestamp.round(1)
Out[12]: 
0    34201.0
1    34201.4
Name: Timestamp, dtype: float64

In [13]: df.Timestamp.round(-1)
Out[13]: 
0    34200
1    34200
Name: Timestamp, dtype: float64

我建议使用datetime64或者DatetimeIndex,而不是用从午夜开始的秒数来表示时间……处理时间是很复杂的。

有一个简单的方法可以得到一个正确的日期时间列:

In [21]: pd.Timestamp('2014-03-04') + df.Timestamp.apply(pd.offsets.Second)
Out[21]: 
0   2014-03-04 09:30:00
1   2014-03-04 09:30:01
Name: Timestamp, dtype: datetime64[ns]

撰写回答