如何将DataFrame的DatetimeIndex转换为周数?遇列不存在错误求助
解决DatetimeIndex转周数时的列不存在问题
问题根源
你报错是因为Time已经被设为DataFrame的索引(DatetimeIndex),不再是普通列,所以直接调用df['Time']会提示该列不存在。
两种解决方法
方法1:直接从索引提取周数(推荐)
无需将索引转回列,直接通过DatetimeIndex的内置方法提取周数:
# 提取ISO标准周数(周一为一周起始,范围1-53) df['Week number'] = df.index.isocalendar().week # 如果需要以周日为起始的周数(范围0-53),用strftime转换为整数 df['Week number'] = df.index.strftime('%U').astype(int)
注:%U代表周日起始的周数,%W代表周一起始的周数,转为整数更方便后续绘图使用。
方法2:将索引转回普通列
如果确实需要保留Time列作为普通列,可以先重置索引:
# 把索引转为普通列 df = df.reset_index() # 从Time列提取周数 df['Week number'] = df['Time'].dt.isocalendar().week
绘图示例
生成周数列后,就可以轻松绘制数据与周数的关联图表:
import matplotlib.pyplot as plt # 散点图展示原始数据分布 plt.figure(figsize=(12,6)) plt.scatter(df['Week number'], df['HVAC Actual'], alpha=0.5, label='HVAC Actual') plt.scatter(df['Week number'], df['Chiller power'], alpha=0.5, label='Chiller power') plt.xlabel('Week Number') plt.ylabel('Power Value') plt.legend() plt.show() # 按周聚合绘制平均值折线图 weekly_data = df.groupby('Week number')[['HVAC Actual', 'Chiller power']].mean() weekly_data.plot(kind='line', figsize=(12,6), marker='o') plt.xlabel('Week Number') plt.ylabel('Average Power') plt.title('Weekly Average HVAC & Chiller Power') plt.show()
内容的提问来源于stack exchange,提问作者b-roijers
相关产品推荐
相关产品推荐

