You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas使用.dt.hour提取时间列小时时报AttributeError如何解决?

错误原因

你遇到的报错来自两个问题:

  1. 直接报错的核心原因是你提前把date列通过.dt.date转换为了Python原生的date对象类型,该类型不属于pandas的datetimelike类型,无法再使用.dt访问器提取小时
  2. 转换日期时指定的format参数没有匹配到末尾的时区标识+00:00,虽然pandas高版本会自动兼容该问题,但严谨来说需要补全格式占位符
修正方案

你需要先从原始datetime类型的列中提取小时,再修改date列的格式,同时处理时区标识的匹配问题,修正后代码如下:

import pandas as pd

data = pd.DataFrame({'date': ['2021-01-01 00:00:00+00:00','2021-01-01 01:00:00+00:00','2021-01-01 02:00:00+00:00'],
                     'btc_open': [28905.98, 29016.12, 29436.64],
                     'btc_close': [29013.05, 29432.82, 29212.86]})
# 转换日期,用%z匹配时区标识,也可以直接省略format参数让pandas自动识别
data['date'] = pd.to_datetime(data['date'], format = '%Y-%m-%d %H:%M:%S%z')

df_subset_1 = data[['date','btc_open','btc_close']].copy() # 加copy避免链式赋值警告

# 先提取小时,再修改date列格式
# 如果你需要小时取值为1-24而非默认的0-23,在dt.hour后加1即可
df_subset_1['hour'] = df_subset_1['date'].dt.hour + 1
df_subset_1['date'] = df_subset_1['date'].dt.date

运行后你就能得到分别包含日期、1-24范围小时字段的DataFrame。

内容的提问来源于stack exchange,提问作者jd_h2003

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:06:10