【问题标题】:How to round the date and time in pandas如何在熊猫中舍入日期和时间
【发布时间】:2020-01-05 21:51:39
【问题描述】:

我在 csv 文件中有一个包含许多列和行的数据框,我的列之一是picking_datetime,我正在尝试对日期时间进行四舍五入以计算值。

Pickup_Datetime         Dropoff_Datetime
2018-01-01 00:00:20     2018-01-01 00:06:44
2018-01-01 00:00:23     2018-01-01 00:31:12
.
.
.
2018-01-31 23:59:43     2018-02-01 00:21:01
2018-01-31 23:59:50     2018-02-01 00:21:43

我尝试了不同的路径来更改类型,但仍然给我一个错误消息

df = data.round["H"]
df

Typeerror: decimals must be an integer, a dict-like or a Series

df['Pickup_Datetime'] = df['Pickup_Datetime'].values.astype(int)
df['Pickup_Datetime'] = df['Pickup_Datetime'].apply(Decimal)

我期待输出:

Pickup_Datetime
2018-01-31 00:00:00
2018-01-31 01:00:00
2018-01-31 02:00:00
.
.
.
.

【问题讨论】:

  • 简而言之,您希望将数据框中的日期时间戳四舍五入到最接近的小时。
  • @AER 是的,但给我一个错误小数必须是整数

标签: python-3.x pandas datetime type-conversion decimal


【解决方案1】:

为了对日期时间进行四舍五入,请使用日期时间系列的 .dt 访问器

df['Pickup_Datetime'] = df['Pickup_Datetime'].dt.round(freq='1H')

【讨论】:

  • 嗯,这比我的简单多了:)
【解决方案2】:

编辑:参考其他答案,简单得多

您是否尝试过将每个日期时间转换为纪元,将其除以 3600(一小时的秒数),然后将其乘以 3600,然后再将其转换回日期时间?

Epoch 实际上是自 1970-01-01 00:00:00 以来的秒数

一些可以做到这一点的代码(不确定如何使用数据框集成):

datetime.datetime.fromtimestamp(round((df['Pickup_Datetime'].apply(strftime,format='%s').apply(int)/3600)*3600)

可能需要调整以符合 PEP8 标准;)

附:如果数据框将日期时间作为字符串获取,则必须先使用 apply 将其转换为日期时间对象,使用 datetime.strptime(format),文档 here

【讨论】:

    猜你喜欢
    • 2019-02-11
    • 2016-07-05
    • 1970-01-01
    • 2022-07-06
    • 2017-06-16
    • 2020-10-19
    • 2021-07-01
    • 2019-07-19
    • 2022-10-12
    相关资源
    最近更新 更多