pandas使用.dt.hour提取时间列小时时报AttributeError如何解决?
错误原因
你遇到的报错来自两个问题:
- 直接报错的核心原因是你提前把
date列通过.dt.date转换为了Python原生的date对象类型,该类型不属于pandas的datetimelike类型,无法再使用.dt访问器提取小时 - 转换日期时指定的
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
相关产品推荐
相关产品推荐

