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
相关产品推荐
相关产品推荐

