运行pybacktest入门示例报AttributeError:'Series'对象无'ix'属性错误
报错根因
这个'Series' object has no attribute 'ix'完全是老库和新版依赖的适配断层问题:
.ix是pandas 0.2x时代的混合索引接口,从pandas 1.0版本开始,官方就把这个方法彻底删掉了,之后统一用.loc做标签索引、.iloc做位置索引。- pybacktest已经很多年没有维护更新,内部源码还在直接调用已经被移除的
.ix方法,只要你装的pandas版本是1.0以上,运行这段示例代码就必触发这个报错。
可直接用的修复方案
- 方案1:直接降级pandas到兼容的低版本
命令行执行安装指定版本pandas的指令:pip install pandas==0.23.4
提醒下,这个版本的pandas只适配Python 3.6及以下的版本,如果你本地Python版本太高,装的时候还会报依赖冲突,需要单独建个低版本Python的虚拟环境来跑。 - 方案2:不降级环境,手动补兼容接口
这个方法适合不想折腾环境版本的人,只要在你原有代码的最开头(导入pandas之后,还没调用pybacktest的逻辑之前),加下面这段代码,给pandas的Series、DataFrame类型补上.ix的调用逻辑,就能绕开老库的旧接口调用:
把这段加上之后再跑原来的回测代码,就不会再报找不到import pandas as pd # 补回旧版ix索引的兼容逻辑 def _ix_compat(self, key): if isinstance(key, tuple): # 处理同时取行和列的索引场景 return self.loc[key[0], key[1]] return self.loc[key] pd.Series.ix = _ix_compat pd.DataFrame.ix = _ix_compat.ix属性的错了。 - 方案3:干脆换个还在更新的回测库
毕竟pybacktest停更好久了,后续跑策略还会遇到各种各样的接口不兼容问题,如果是长期做量化回测,不如换个适配新版pandas、还在持续维护的回测框架,省得之后天天改兼容代码。
内容的提问来源于stack exchange,提问作者UniversalBasicIncomeSupporter8
相关产品推荐
相关产品推荐

