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

如何用双条件筛选CSV数据?Python 2脚本年月筛选异常求助

解决思路:联合过滤年份与月份

看起来你已经搞定了滑块选月份的交互,但差了关键的一步——把用户输入的年份和滑块选中的月份结合起来做联合过滤,现在的逻辑只筛了月份,自然会把所有年份的该月数据都捞出来啦。给你几个具体的修正方向:

1. 确保年份输入被正确捕获

首先确认你已经把用户输入的年份转换成了和数据匹配的格式:

  • 如果用Python 2获取用户输入,记得用raw_input(),然后转成整数:
    # 获取用户输入的年份
    target_year = int(raw_input("请输入要查看的年份:"))
    
  • 如果你的日期列是字符串类型,要先转成datetime格式,方便提取年份和月份:
    import pandas as pd
    # 假设日期列叫'date',先转成datetime
    df['date'] = pd.to_datetime(df['date'])
    

2. 修改过滤逻辑:同时匹配年份和月份

把原来只过滤月份的代码,改成同时筛选年份等于用户输入、月份等于滑块值的条件,用&(逻辑与)连接两个条件,注意每个条件要加括号:

# 滑块回调函数里的过滤部分
def update_chart(selected_month):
    # 联合过滤:年份匹配+月份匹配
    filtered_df = df[(df['date'].dt.year == target_year) & (df['date'].dt.month == selected_month)]
    
    # 接下来就是用filtered_df重新绘制图表,比如清除旧画布再绘图
    ax.clear()
    ax.plot(filtered_df['your_x_col'], filtered_df['your_y_col'])
    # 如果是用matplotlib的滑块,别忘了刷新画布
    fig.canvas.draw_idle()

3. 额外的小提示

  • 可以加个合法性校验:先检查用户输入的年份是否存在于数据中,避免空数据绘图报错:
    available_years = df['date'].dt.year.unique()
    if target_year not in available_years:
        print("抱歉,数据中没有{}年的记录,请重新输入!".format(target_year))
        # 这里可以再加逻辑让用户重新输入
    
  • 如果你的滑块是用ipywidgets之类的工具,要确保回调函数能正确获取到target_year变量(比如把它作为闭包变量,或者传入回调)。

这样修改后,滑块选择的月份就只会匹配用户指定年份的数据啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:21