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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:00:17