如何调整引用的pandas DataFrame时间范围,无需重复新建数据对象?
解决方案
你已经拉取了完整10年的日线数据存储在data对象中,pandas针对DatetimeIndex类型的索引提供了原生的时间范围切片能力,完全不需要重复调用yfinance拉取数据,也不用新建多个冗余的数据对象。
常用截取方法
1. 相对时间快速截取
直接使用pandas内置的last()方法,输入对应时间周期即可截取最近的对应范围数据,写法非常简洁:
# 截取最近3个月数据 data.last('3M') # 截取最近6个月数据 data.last('6M') # 截取最近1年数据 data.last('1Y')
对应你要计算最近3个月对数收益率的需求,可以直接链式调用完成,不需要存中间变量:
log_returns = np.log(data.last('3M')/data.last('3M').shift()).dropna()
2. 固定起止时间截取
如果需要自定义具体的起止时间范围,直接用.loc索引切片即可:
# 截取2023年1月1日到2023年6月30日的数据 data.loc['2023-01-01':'2023-06-30'] # 截取2022年全年的数据 data.loc['2022'] # 截取2023年第二季度数据 data.loc['2023-04':'2023-06']
3. 动态时间范围截取
和你之前计算90天时间范围的逻辑对齐的话,可以先计算起始时间再切片:
start_cut = dt.datetime.today() - dt.timedelta(90) recent_90d_data = data.loc[start_cut:]
注意事项
yfinance返回的行情数据默认索引就是DatetimeIndex格式,不需要你额外做格式转换,上述方法可以直接生效。你全程只需要维护最开始拉取的全量data对象即可,需要任意时间范围直接从该对象截取即可,不会产生冗余变量,也不需要重复请求接口浪费时间。
内容的提问来源于stack exchange,提问作者atrmi
相关产品推荐
相关产品推荐

