【问题标题】:Creating Columns for Hour of Day and date based on datetime column根据日期时间列为一天中的小时和日期创建列
【发布时间】:2020-09-20 03:12:20
【问题描述】:

如何根据具有日期时间时间戳的列创建仅包含日期和仅包含一天中的小时的新列?

DF 有如下列:

   Timestamp
2019-05-31 21:11:43 
2018-11-21 18:01:00 
2017-11-21 22:01:04 
2020-04-15 11:01:00 
2017-04-20 04:00:33

我想要两个如下所示的新列:

   Day      | Hour of Day
2019-05-31     21:00
2018-11-21     18:00
2017-11-21     22:00    
2020-04-15     11:00    
2017-04-20     04:00

我尝试了类似下面的方法,但它只给了我一天中的一个小时,

df['hour'] = pd.to_datetime(df['Timestamp'], format='%H:%M:%S').dt.hour

9:32:00 的输出将是 9,这不是我想要计算的

谢谢!

【问题讨论】:

  • 您所说的“日”是什么意思?另外,您是要将时间四舍五入到最接近的小时数还是直接取整?

标签: python python-3.x pandas datetime


【解决方案1】:

请尝试dt.strftime(format+string)

df['hour'] = pd.to_datetime(df['Timestamp']).dt.strftime("%H"+":00")

在下面关注您的 cmets。让我们尝试使用df.assign 并分别提取hourdate

df=df.assign(hour=pd.to_datetime(df['Timestamp']).dt.strftime("%H"+":00"), Day=pd.to_datetime(df['Timestamp']).dt.date)

【讨论】:

  • 谢谢。但我怎样才能改变,所以我也有日栏?
  • 是的,让我们试试df=df.assign(hour=pd.to_datetime(df['Timestamp']).dt.strftime("%H"+":00"), Day=pd.to_datetime(df['Timestamp']).dt.date)
【解决方案2】:

您可以将时间转换为字符串,然后只需按索引选择子字符串。

df = pd.DataFrame({'Timestamp': ['2019-05-31 21:11:43', '2018-11-21 18:01:00', 
                             '2017-11-21 22:01:04', '2020-04-15 11:01:00', 
                             '2017-04-20 04:00:33']})
df['Day'], df['Hour of Day'] = zip(*df.Timestamp.apply(lambda x: [str(x)[:10], str(x)[11:13]+':00']))

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多