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

Pandas批量处理年份数据:如何用循环自动筛选年度流量数据

解决方案

首先,你当前用字符串比较日期的方式存在隐患(比如DD/MM/YYYY格式的字符串排序逻辑和实际日期不符),建议先将日期列转换为pandas的datetime类型,这样年份筛选会更准确高效。

步骤1:转换日期列并提取年份

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据,转换日期列
dailyq = pd.read_csv('Meandq.csv', sep=';')
dailyq['Date'] = pd.to_datetime(dailyq['Date'], dayfirst=True)  # 适配你的DD/MM/YYYY日期格式

# 新增年份列(方便后续筛选)
dailyq['Year'] = dailyq['Date'].dt.year

步骤2:循环处理逐年数据并绘图

有两种循环方式可选:

方式1:处理数据集内存在的所有年份

如果你的数据集不是每一年都有数据,这种方式会自动跳过无数据的年份:

# 获取所有唯一年份并排序
unique_years = dailyq['Year'].unique()
unique_years.sort()

for year in unique_years:
    # 筛选当前年份的数据
    qy = dailyq[dailyq['Year'] == year]
    
    # 绘制时间-流量图
    plt.figure(figsize=(10, 4))
    plt.plot(qy['Date'], qy['流量列名称'])  # 替换成你实际的流量列字段名
    plt.title(f'{year}年 时间-流量图')
    plt.xlabel('日期')
    plt.ylabel('流量')
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()
    # 如需保存图片,添加:plt.savefig(f'{year}_流量趋势图.png')

方式2:指定固定年份范围循环(比如1950-2022)

如果要强制覆盖指定区间的每一年,不管是否有数据:

start_year = 1950
end_year = 2022

for year in range(start_year, end_year + 1):
    qy = dailyq[dailyq['Year'] == year]
    
    # 跳过无数据的年份
    if qy.empty:
        print(f'{year}年无数据,跳过')
        continue
    
    # 绘图逻辑与上方一致
    plt.figure(figsize=(10, 4))
    plt.plot(qy['Date'], qy['流量列名称'])
    plt.title(f'{year}年 时间-流量图')
    plt.xlabel('日期')
    plt.ylabel('流量')
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()

关键说明

  • 转换日期列为datetime类型是核心,既避免了字符串比较的逻辑错误,也能更便捷地提取年份、月份等时间属性。
  • 循环逻辑简单直接:遍历目标年份→筛选对应数据→绘图输出,批量操作效率大幅提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:27:44