【问题标题】:Python: Round time to the nearest second and minutePython:将时间舍入到最接近的秒和分钟
【发布时间】:2014-04-07 02:11:02
【问题描述】:

我有一个DataFrame 和一列Timestamp,其中每个值都是自午夜以来的秒数,精度为纳秒。例如:

Timestamp
34200.984537482
34201.395432198

等等。自午夜以来的 34200 秒是上午 9:30:00。

我想在我的dataframe 中创建新条目,其中包含一列SecondMinute,我将Timestamp 舍入到最接近的秒和分钟(前瞻性)。所以

Timestamp         Second           Minute
34200.984537482   34201            34260
34201.395432198   34202            34260 

如何在 Python 中做到这一点?另外,我应该使用 Pandas 的DateTimeIndex 吗?一旦我完成时间,我将计算每个时间戳之间的时间差,因此 DateTimeIndex 可能更合适。

【问题讨论】:

  • 你绝对应该使用 datetime64/DatetimeIndex。

标签: python time pandas


【解决方案1】:

有一个Seriesround方法:

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 而不是午夜后的秒数...保持时间hard

获取正确日期时间列的一种简单方法:

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]

【讨论】:

  • 谢谢安迪。 df.Timestamp.round() 运作良好。对于正确的日期时间列,我需要有日期吗?如果我只想要时间应该没问题不是吗?我可以使用pd.offsets.Second(或分钟)四舍五入到所需的前进时间吗?
  • @CharlesM 我认为你最好约会,当然如果没关系你可以使用一个假人。你也许可以使用timedelta,我不认为有一个可以使用的熊猫时间(没有日期)对象......
【解决方案2】:

对于最近的秒,只需使用math.ceil,所以:

    import math
    second = math.ceil(timestamp)

对于最接近的分钟,除以 60.0,四舍五入,然后乘以 60。

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 2018-10-25
    • 2011-01-22
    • 2022-01-02
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多