【问题标题】:Python getting hour from from timestampPython从时间戳获取小时
【发布时间】:2019-08-09 06:53:33
【问题描述】:

我需要根据小时对时间戳进行分类,例如,如果它在上午 7 点到上午 9 点之间,那就是早上。我有从我的 csv 文件中获取的时间戳,我只需要得到一个小时,这样我就可以使用 if 语句对数字进行分类。

我将从 date 列中获取时间戳并创建一个名为 hour 的新列,

df['hour'] = df.date.dt.hour

但它给了我以下错误:AttributeError: Can only use .dt accessor with datetimelike values

时间戳如下:2016-03-14 17:24:55

【问题讨论】:

  • 您必须首先将日期列转换为日期时间,如下所示:df['date'] = pd.to_datetime(df['date'])

标签: python date datetime timestamp


【解决方案1】:

您获得AttributeError: Can only use .dt accessor with datetimelike values 的原因很可能是因为该特定系列不是datetime 对象类型。

与错误状态一样,.dt 属性可用于日期时间对象。所以首先要做的是检查条目的type。 假设这些值不是 datetime 对象然后进行转换,

指定datetime_format = '%Y-%m-%d %H:%M:%S' 并使用.dt 如下方式获取时间值:

data['start_datetime'] = pd.to_datetime(data['start_datetime'], format=datetime_format)
h = data['start_datetime'].dt.hour
m = data['start_datetime'].dt.minute
s = data['start_datetime'].dt.second

【讨论】:

    【解决方案2】:

    您需要先将“日期”列转换为数据时间对象:

    df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M:%S')
    df['hour'] = df['date'].dt.hour
    

    【讨论】:

      【解决方案3】:

      您需要使用从 CSV 输入数据中提取的时间戳字符串创建一个 datetime 对象:

      In [1]: import datetime
      
      In [2]: s = '2016-03-14 17:24:55'
      
      In [3]: d = datetime.datetime.fromisoformat(s)
      
      In [4]: d.hour
      Out[4]: 17
      

      【讨论】:

        【解决方案4】:

        我不确定df 是什么类型的对象,但您可以将时间戳转换为datetime 对象,然后使用日期时间对象的属性来访问时间戳属性:

        from datetime import datetime
        
        d = datetime.strptime('2016-03-14 17:24:55', '%Y-%m-%d %H:%M:%S')
        df['hour'] = d.hour
        

        你可以阅读更多关于datetime模块at this link

        【讨论】:

          猜你喜欢
          • 2012-12-09
          • 1970-01-01
          • 2017-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多