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

如何在Python中绘制日粒度季节性时间序列图表并生成对应DataFrame

实现方案

前置依赖

你需要提前安装以下常用Python数据处理库:

  • pandas:用于时间序列数据清洗、格式转换
  • matplotlib:用于可视化绘图

步骤1:构造目标格式DataFrame

首先对原始时间序列做格式转换,直接生成你需要的「索引为dd/mm日期、列对应各年份」的结构:

import pandas as pd

# 读取原始数据,注意加dayfirst=True适配你当前的日/月/年日期格式
# 如果数据已经在内存里,可以跳过读取步骤,直接把你的数据转成datetime索引即可
raw_df = pd.read_csv(
    "你的数据文件路径.csv",
    index_col=0,
    parse_dates=True,
    dayfirst=True
)

# 提取年份、月日维度
raw_df["year"] = raw_df.index.year
raw_df["day_month"] = raw_df.index.strftime("%d/%m")

# 可选:如果需要排除闰年2月29日避免对齐问题,执行以下代码
# raw_df = raw_df[~raw_df["day_month"].eq("29/02")]

# 生成目标DataFrame,这里以处理A列数据为例,多列可以自行循环调整values参数
target_df = raw_df.pivot(
    index="day_month",
    columns="year",
    values="A"
)

生成的target_df就完全符合你的要求:索引是dd/mm格式的年内日期,每一列对应对应年份的日度数值,可直接用于后续分析。

步骤2:绘制季节性对比图表

基于上述生成的target_df,直接遍历各年份列绘制曲线即可,代码如下:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"] # 解决中文显示问题,不需要可以删除
plt.figure(figsize=(14, 6))

# 遍历每一年绘制曲线
for year in target_df.columns:
    plt.plot(
        target_df.index,
        target_df[year],
        label=str(year),
        alpha=0.7,
        linewidth=1.2
    )

# 优化x轴刻度,避免日度标签拥挤,仅显示每月首日
month_ticks = [f"01/{i:02d}" for i in range(1, 13)]
month_labels = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]
plt.xticks(
    ticks=[target_df.index.get_loc(t) for t in month_ticks if t in target_df.index],
    labels=month_labels
)

plt.xlabel("月份")
plt.ylabel("数值")
plt.title("各年份季节性日度数据对比")
plt.legend(bbox_to_anchor=(1.02, 1), loc="upper left")
plt.tight_layout()
plt.show()

优化说明

  • 若需要处理多列数据(A-I),可以写循环遍历raw_df的数值列,分别生成对应target_df和图表即可
  • 若数据存在缺失值,可以用target_df = target_df.interpolate()做线性插值补全,避免曲线断裂
  • 当年份数量较多时,可以降低alpha参数值、调细linewidth,避免曲线重叠看不清

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:00:00