pandas 1分钟股票时序数据重采样为5分钟时出现非交易时段空值问题求助
股票日内数据重采样过滤非交易时段的解决方案
pandas默认resample方法会生成连续时间轴,因此会包含休市时段的空值行,可通过以下两种方案实现仅交易时段重采样:
方案1:按交易日分组逐天重采样(推荐)
该方法将每日交易数据单独分组处理,重采样范围严格限制在当日交易时段内,不会跨休市时段生成空索引,不需要手动配置交易时间,通用性更强。
import yfinance as yf import pandas as pd # 原始获取1分钟NSEI数据代码 n = yf.download('^nsei', period= '5d', interval= '1m') # 按日期分组,对每个交易日单独执行5分钟重采样 n_5min = n.groupby(n.index.date, group_keys=False).apply( lambda df: df.resample('5T').agg( {'Open':'first', 'High':'max', 'Low':'min', 'Close':'last', 'Adj Close':'last', 'Volume':'sum'} ) ) # 过滤少量因临时停盘等情况产生的空值 n_5min = n_5min.dropna()
方案2:重采样后按固定交易时段过滤
如果对应市场交易时段固定(印度NSE交易时段为当地时间9:15-15:30),可先全局重采样后筛选符合交易时间的行,操作更简便:
import yfinance as yf import pandas as pd n = yf.download('^nsei', period= '5d', interval= '1m') # 先执行全局5分钟重采样 n_5min = n.resample('5T').agg( {'Open':'first', 'High':'max', 'Low':'min', 'Close':'last', 'Adj Close':'last', 'Volume':'sum'} ) # 仅保留交易时段的行,同时过滤周末等非交易日空值 n_5min = n_5min.between_time('09:15', '15:30').dropna()
注意:该方案需要确保数据索引的时区和交易时段的时区一致,yfinance返回的^NSEI数据默认带Asia/Kolkata时区,可直接适配上述时间范围。
内容的提问来源于stack exchange,提问作者Raj Nair
相关产品推荐
相关产品推荐

