如何用双条件筛选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
相关产品推荐
相关产品推荐

