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

如何筛选Pandas DataFrame指定年份区间数据并绘制折线图

问题修复与实现方案

现有代码已知问题

  • 参数名不匹配:函数定义的入参为lim_up、lim_donw,但循环中使用了未声明的lim_infe、lim_sup变量,运行会直接抛出变量未定义报错
  • 无筛选逻辑:统计全量年份的频次后,没有按照入参的时间范围过滤数据
  • 缺少可视化代码:没有实现折线图绘制的相关逻辑

完整可运行实现

首先确保已导入依赖库:

import pandas as pd
import matplotlib.pyplot as plt

修正后的函数代码:

def crear_grafico(lim_down:int, lim_up:int, datos: pd.DataFrame):
    # 统一年份列数据类型为整数,避免字符串、整数类型不匹配导致筛选失效
    datos['AnioDesmovilizacion'] = pd.to_numeric(datos['AnioDesmovilizacion'], errors='coerce')
    # 直接筛选符合年份范围的行,自动剔除不在上下限区间的无效数据
    filtered_df = datos[datos['AnioDesmovilizacion'].between(lim_down, lim_up)]
    # 统计各年份出现频次,按年份升序排序保证折线图时序正确
    year_freq = filtered_df['AnioDesmovilizacion'].value_counts().sort_index()
    
    # 绘制折线图
    plt.figure(figsize=(10, 6))
    plt.plot(year_freq.index, year_freq.values, marker='o', color='#2E86AB', linewidth=2)
    # 配置图表样式
    plt.title('年份维度出现频次统计', fontsize=14)
    plt.xlabel('年份', fontsize=12)
    plt.ylabel('出现频次', fontsize=12)
    plt.grid(alpha=0.3)
    plt.xticks(rotation=45)
    plt.tight_layout()
    # 展示图表
    plt.show()
    
    # 可选项:返回统计结果供其他业务逻辑使用
    return year_freq

核心逻辑说明

  • 数据类型统一:优先把年份列转为数值类型,避免因为源数据中年份是字符串、入参是整数导致匹配失败的问题,pd.to_numeric的errors='coerce'参数会把无法转换的异常值转为空值,后续会自动过滤
  • 范围筛选:用Series.between()方法直接筛选符合上下限的行,比手动生成年份列表再遍历匹配的效率更高,代码更简洁
  • 排序处理:统计频次后调用sort_index()按年份排序,避免因为源数据年份顺序混乱导致折线图时序错乱
  • 可视化配置:默认加了数据标记点、坐标轴标签、网格线等基础样式,可根据需求自行调整颜色、尺寸等参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:24:03