如何用Streamlit按月份筛选DataFrame中YYYY-MM-DD格式日期列?
按加泰罗尼亚语月份筛选DataFrame日期行的解决方法
核心问题分析
你之前失败的原因主要有两个:
- 原始
Data de la classe列是字符串格式,无法直接提取月份; - 没有建立加泰罗尼亚语月份与数字月份的对应映射,导致筛选逻辑不匹配。
分步解决代码
1. 转换日期列类型
首先必须把字符串格式的日期转换成datetime类型,这样才能用dt.month提取月份:
import pandas as pd import streamlit as st # 读取CSV数据 df = pd.read_csv('你的文件路径.csv') # 转换日期列,errors='coerce'可将无效日期转为NaT避免报错 df['Data de la classe'] = pd.to_datetime(df['Data de la classe'], errors='coerce')
2. 定义加泰罗尼亚语月份映射
创建字典对应加泰罗尼亚语月份和数字月份:
cat_month_map = { 'Gener': 1, 'Febrer': 2, 'Març': 3, 'Abril': 4, 'Maig': 5, 'Juny': 6, 'Juliol': 7, 'Agost': 8, 'Setembre': 9, 'Octubre': 10, 'Novembre': 11, 'Desembre': 12 }
3. 侧边栏选择器与筛选逻辑
用Streamlit侧边栏创建选择框,再根据选择的月份筛选数据:
# 侧边栏选择月份 selected_cat_month = st.sidebar.selectbox('Selecciona el mes', list(cat_month_map.keys())) # 获取对应数字月份 target_month = cat_month_map[selected_cat_month] # 筛选数据(两种方法二选一) # 方法一:布尔索引(更直观) filtered_df = df[df['Data de la classe'].dt.month == target_month] # 方法二:df.query(如果你偏好这种写法) # filtered_df = df.query("`Data de la classe`.dt.month == @target_month") # 显示结果 st.dataframe(filtered_df)
完整示例代码
把所有步骤整合起来的完整可运行代码:
import streamlit as st import pandas as pd # 读取CSV(替换成你的文件路径) df = pd.read_csv('classes.csv') # 转换日期列 df['Data de la classe'] = pd.to_datetime(df['Data de la classe'], errors='coerce') # 加泰罗尼亚语月份映射 cat_month_map = { 'Gener': 1, 'Febrer': 2, 'Març': 3, 'Abril': 4, 'Maig': 5, 'Juny': 6, 'Juliol': 7, 'Agost': 8, 'Setembre': 9, 'Octubre': 10, 'Novembre': 11, 'Desembre': 12 } # 侧边栏选择器 selected_month = st.sidebar.selectbox('Selecciona el mes', list(cat_month_map.keys())) # 筛选并显示 target_month = cat_month_map[selected_month] filtered_df = df[df['Data de la classe'].dt.month == target_month] st.dataframe(filtered_df)
内容的提问来源于stack exchange,提问作者Adrià Martínez
相关产品推荐
相关产品推荐

