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

如何基于Pandas多年度小时臭氧时间序列数据绘制每日图表及高效编码方案

这是个非常典型的时间序列可视化需求,我来给你拆解最简洁高效的实现步骤,兼顾代码可读性和运行效率:

第一步:数据预处理(核心前提)

首先必须确保你的时间列是Pandas可识别的datetime类型——这是所有时间序列操作的基础,也是高效处理的关键:

import pandas as pd
import matplotlib.pyplot as plt

# 假设你的DataFrame名为df,包含`time_lt`(时间列)和`ozone`(臭氧浓度列)
df['time_lt'] = pd.to_datetime(df['time_lt'])  # 一次性转换所有时间字符串
df['date'] = df['time_lt'].dt.date  # 提取日期(如1980-04-24)作为分组键

第二步:按日期高效分组

利用Pandas内置的矢量化分组功能,直接按date列分组——这比自定义函数提取日期快得多:

# 按日期分组,得到每个日期对应的小时级数据组
daily_groups = df.groupby('date')

如果只需要某一年的数据(比如1980年),可以先筛选再分组,减少后续处理的数据量:

df_target_year = df[df['time_lt'].dt.year == 1980]
daily_groups = df_target_year.groupby('date')

第三步:批量绘制每日图表(高效核心)

定义一个通用的绘图函数,然后遍历每个分组绘制并保存图表。这里有两个关键优化点:及时释放内存和矢量化操作:

def plot_daily_ozone(group):
    # 获取当前分组的日期(分组的name属性就是分组键)
    current_date = group.name
    # 创建画布和轴对象(面向对象接口比plt.pyplot更高效可控)
    fig, ax = plt.subplots(figsize=(8, 4))
    
    # 矢量化提取小时数作为x轴,避免循环处理每个时间点
    hourly_ticks = group['time_lt'].dt.hour
    # 绘制小时级臭氧变化曲线
    ax.plot(hourly_ticks, group['ozone'], marker='o', linestyle='-', color='tab:blue')
    
    # 设置图表属性
    ax.set_title(f'Ozone Concentration - {current_date}')
    ax.set_xlabel('Hour of Day (0-23)')
    ax.set_ylabel('Ozone Level')
    ax.set_xticks(range(0, 24))  # 显示所有小时刻度
    ax.grid(True, alpha=0.3)
    
    # 保存图表(按日期命名,方便后续查找)
    plt.savefig(f'ozone_daily_{current_date}.png', dpi=100, bbox_inches='tight')
    plt.close(fig)  # 必须关闭画布,释放内存!否则365张图会导致内存溢出

# 遍历所有分组,批量生成图表
for _, daily_data in daily_groups:
    plot_daily_ozone(daily_data)

# 或者更简洁的apply写法,效果完全一致
# daily_groups.apply(plot_daily_ozone)

为什么这是最高效的实现?

  • 矢量化操作优先:所有时间处理(转换、提取日期/小时)都是Pandas内置的矢量化方法,比Python循环快几个数量级
  • 内存管理优化:plt.close(fig)及时释放画布内存,避免绘制大量图表后内存耗尽
  • 分组逻辑简洁:利用groupby的原生功能,避免手动拆分数据的冗余代码
  • 可扩展性强:如果需要调整图表样式、添加统计指标(如日均最大值),直接在plot_daily_ozone函数里修改即可

内容的提问来源于stack exchange,提问作者Shane Markus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:34:07