【问题标题】:Split Time Series Data Into Time Intervals in one line (PythonicWay) - Hourly将时间序列数据拆分为一行中的时间间隔 (PythonicWay) - 每小时
【发布时间】:2017-07-15 01:39:28
【问题描述】:

我有一个包含时间列的分钟数据。我想用日期时间格式创建仅hours 的新列,例如format ='%Y-%m-%d %H:%M:%S'。我知道在 R 中,我们可以使用类似的东西,

value$hour<- cut(as.POSIXct(paste(value$time),
                          format="%Y-%m-%d %H:%M:%S"), breaks="hour")

当我这样做时,我得到以下输出,(我需要)

time                 hour
2017-02-10 00:00:00  2017-02-10 00:00:00
2017-02-10 00:01:00  2017-02-10 00:00:00
2017-02-10 00:02:00  2017-02-10 00:00:00
2017-02-10 00:03:00  2017-02-10 00:00:00
....
2017-12-1 10:05:00   2017-12-01 10:00:00
2017-12-1 10:06:00   2017-12-01 10:00:00

我也知道有很多线程在讨论dt.datedt.hour 等。我可以像这样在 python 中执行以下操作,

value['date'] = value['time'].dt.date
value['hour'] = value['time'].dt.hour

有什么方法可以在 python 中与上面提到的 R 类似吗? 任何想法将不胜感激。提前致谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你需要dt.floor:

    df['hour'] = df['time'].dt.floor('H')
    print (df)
                     time                hour
    0 2017-02-10 00:00:00 2017-02-10 00:00:00
    1 2017-02-10 00:01:00 2017-02-10 00:00:00
    2 2017-02-10 00:02:00 2017-02-10 00:00:00
    3 2017-02-10 00:03:00 2017-02-10 00:00:00
    4 2017-12-01 10:05:00 2017-12-01 10:00:00
    5 2017-12-01 10:06:00 2017-12-01 10:00:00
    

    如果需要转换成datetimetime添加to_datetime:

    df['hour'] = pd.to_datetime(df['time']).dt.floor('H')
    print (df)
                      time                hour
    0  2017-02-10 00:00:00 2017-02-10 00:00:00
    1  2017-02-10 00:01:00 2017-02-10 00:00:00
    2  2017-02-10 00:02:00 2017-02-10 00:00:00
    3  2017-02-10 00:03:00 2017-02-10 00:00:00
    4   2017-12-1 10:05:00 2017-12-01 10:00:00
    5   2017-12-1 10:06:00 2017-12-01 10:00:00
    

    【讨论】:

    • 谢谢,df['time'].dt.floor('H') 可以解决问题,因为我已经将 df['time'] 转换为 pd.to_datetime。但是,我的新列 hour 仅显示日期并缺少 00:00:00 部分。有什么想法吗?
    • 是的,在 pandas 中,如果所有值都是 00:00:00,则不会显示。但是如果通过print (df.loc[0, 'time'])检查值,它也会丢失零。
    • 完美,您的意思是print (df.loc[0, 'hour']) 对吗?这工作完美,太棒了,谢谢!
    • 我必须把标志放在它改变的地方,我该怎么做?
    猜你喜欢
    • 2012-11-18
    • 2018-04-27
    • 2017-06-05
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2021-07-16
    相关资源
    最近更新 更多