如何使用pd.to_datetime实现Streamlit用户自主选择未来日期作为股票预测结束日期
失效核心原因
st.date_input 返回的是原生 datetime.date 对象,而 pandas_datareader 的 DataReader 接口仅支持字符串、pandas.Timestamp 类型的日期参数,类型不匹配导致调用失败。另外需要注意:雅虎财经仅能提供截止到当前交易日的历史真实股价,你要实现的未来日期预测,需要把「历史数据拉取结束日期」和「预测结束日期」分开处理。
修改后可运行代码示例
import streamlit as st import pandas as pd import pandas_datareader.data as data from datetime import date st.title('Stock Prediction') # 侧边栏输入区 ticker_input = st.sidebar.text_input('Enter Stock Ticker', 'AAPL') # 获取用户选择的起止日期 start = st.date_input('Start', value = pd.to_datetime('2010-01-01')) end = st.date_input('End', value = pd.to_datetime('2024-01-01')) # 日期类型转换,转为DataReader支持的字符串格式 start_str = start.strftime('%Y-%m-%d') # 拉取历史数据最多只能到当前日期,用户选的结束日期晚于今天时,历史数据先拉取到今天 today = date.today() fetch_end = end if end <= today else today fetch_end_str = fetch_end.strftime('%Y-%m-%d') # 拉取历史股价 df = data.DataReader(ticker_input, 'yahoo', start_str, fetch_end_str) st.subheader(ticker_input) st.dataframe(df) # 计算需要预测的天数,对接你原有的预测模型逻辑即可 if end > today: predict_days = (end - today).days # 生成predict_days的预测数据后和历史df按日期拼接,就能得到截止到用户所选日期的完整数据用于可视化 st.write(f'需要预测未来{predict_days}天的股价')
补充说明
- 如果你使用的其他股票接口支持直接传入未来日期返回预测结果,直接把转成字符串格式的
end.strftime('%Y-%m-%d')传给对应接口参数即可。 - 可视化时把历史数据和预测数据按日期拼接后绘图,最终图表的结束时间就会和用户选择的日期完全一致。
内容的提问来源于stack exchange,提问作者datanegator
相关产品推荐
相关产品推荐

