使用pivot_table按日期和小时透视DataFrame遇AttributeError求助
问题解答:pivot_table中datetime属性调用错误修复
错误原因
你写的["date"].dt.date是对列表对象调用dt属性,但列表本身没有dt方法。dt是pandas中datetime类型Series的专属属性,必须通过DataFrame的列(即Series对象)来调用,不能直接对列名字符串的列表使用。
正确写法
方法一:直接在参数中提取datetime属性
需要从DataFrame中取出date列(得到Series),再调用dt属性提取日期和小时部分,作为pivot_table的索引和列参数:
import pandas as pd pivot_df = pd.pivot_table( df_fuel, index=df_fuel['date'].dt.date, columns=df_fuel['date'].dt.hour, values='Fuel_price' )
方法二:预先创建辅助列(适合大型数据集)
先给DataFrame新增日期和小时列,再用列名做透视,这种方式在处理大型数据集时性能更稳定,后续复用维度也更方便:
import pandas as pd # 新增辅助列 df_fuel['date_only'] = df_fuel['date'].dt.date df_fuel['hour_only'] = df_fuel['date'].dt.hour # 基于新列生成透视表 pivot_df = pd.pivot_table( df_fuel, index='date_only', columns='hour_only', values='Fuel_price' )
补充提示
- 当
values仅对应单一列时,直接传入列名字符串即可,无需用列表包裹,这样最终生成的DataFrame结构更简洁。 - 预先创建辅助列的方式,能避免在pivot_table中重复计算
dt属性,对于大型数据集来说,能减少重复计算带来的性能损耗。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

