如何在Python中用365天、52周替代8760小时绘制时序图
解决思路&代码实现
8760个timestep对应一年的小时级数据(365天×24小时),先把timestep转成标准时间格式,再按日/周维度聚合后就能轻松绘图。以下是完整可运行的代码:
1. 导入依赖库
import pandas as pd import matplotlib.pyplot as plt
2. 数据加载与时间转换
假设你的数据已经存在DataFrame df 中(如果是CSV文件,用pd.read_csv('你的文件路径.csv')读取即可)。将timestep转换为可识别的时间格式:
# 从2023年1月1日0时开始,每个timestep对应1小时 df['datetime'] = pd.date_range(start='2023-01-01 00:00:00', periods=8760, freq='H') # 将时间列设为索引,方便后续聚合操作 df.set_index('datetime', inplace=True)
3. 按日/周维度聚合数据
这里以均值为例,你可根据需求换成sum()(总和)、max()(最大值)等统计方式:
# 按日聚合,计算每日数值均值 daily_data = df['value'].resample('D').mean() # 按周聚合,计算每周数值均值(默认周从周一开始,要周日开头就加参数:weekday=6) weekly_data = df['value'].resample('W').mean()
4. 绘制趋势图
# 设置清爽的绘图风格 plt.style.use('seaborn-v0_8') # 绘制日维度趋势图 plt.figure(figsize=(12, 5)) daily_data.plot(title='每日数值趋势') plt.xlabel('日期') plt.ylabel('数值') plt.grid(True) plt.show() # 绘制周维度趋势图 plt.figure(figsize=(12, 5)) weekly_data.plot(title='每周数值趋势') plt.xlabel('周') plt.ylabel('数值') plt.grid(True) plt.show()
补充说明
- 若你的timestep不是从年初开始,修改
pd.date_range()的start参数即可(比如改成'2023-03-01 08:00:00')。 - 数据有缺失值的话,聚合前可以用
df.fillna(method='ffill')(向前填充)或df.interpolate()(插值填充)补全。
内容的提问来源于stack exchange,提问作者momo
相关产品推荐
相关产品推荐

