You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyfolio自定义示例在Jupyter运行遇Pandas双版本报错求助

Pyfolio与Pandas版本兼容问题解决方案

问题描述

在OSX系统的Jupyter Notebook中运行自定义Pyfolio示例时,遇到两类版本相关报错:

  • 使用Pandas>2.0.0时,触发报错:AttributeError: 'Series' object has no attribute 'iteritems'
  • 使用Pandas<2.0.0时,触发报错:IndexError: index -1 is out of bounds for axis 0 with size 0

当前基于最新版Pandas的操作流程:

  1. 创建包含pyfolio、jupyter、pandas的requirements.txt
  2. 执行virtualenv --python python3 env创建虚拟环境
  3. 执行source ./env/bin/activate激活虚拟环境
  4. 执行pip3 install -r requirements.txt安装依赖包
  5. 启动Jupyter Notebook并运行示例代码,调用pf.create_full_tear_sheet(returns, positions=positions, transactions=transactions)时触发报错,当前环境版本为pyfolio 0.9.2、pandas 2.1.4

解决方案

1. 解决Pandas>2.0.0的iteritems报错

Pyfolio 0.9.2未适配Pandas 2.0+的API变更——Pandas 2.0移除了Series.iteritems(),统一使用Series.items()替代。提供两种解决方式:

  • 修改Pyfolio源码:找到虚拟环境中Pyfolio的安装路径(通常为./env/lib/python3.x/site-packages/pyfolio),遍历tears.py、timeseries.py等核心文件,将所有series.iteritems()替换为series.items(),保存后重启Jupyter即可。
  • 安装适配新版Pandas的Pyfolio分支:直接安装社区维护的适配版本,执行以下命令:
    pip install git+https://github.com/quantopian/pyfolio.git@master
    

2. 解决Pandas<2.0.0的索引越界报错

该报错通常源于输入数据格式不符合Pyfolio要求或数据为空,按以下步骤排查修复:

  • 检查positions和transactions数据是否非空,且时间索引与returns的索引完全对齐。
  • 确认positions为标准DataFrame:行是时间戳,列是资产代码,单元格值对应持仓数量或市值。
  • 确认transactions为标准DataFrame:必须包含date、amount、price、symbol等必填字段,且字段格式符合Pyfolio预期。

推荐最优方案

优先选择适配Pandas 2.0+的Pyfolio版本,同时确保输入数据合规,操作步骤如下:

  1. 清理并重建虚拟环境:
    rm -rf env
    virtualenv --python python3 env
    source ./env/bin/activate
    
  2. 安装适配版依赖:
    pip install jupyter pandas>=2.0 git+https://github.com/quantopian/pyfolio.git@master
    
  3. 验证环境版本:
    pip list | grep -E "pyfolio|pandas"
    
  4. 重启Jupyter Notebook并重新运行示例代码,确认pf.create_full_tear_sheet()可正常执行。

内容的提问来源于stack exchange,提问作者Sandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:34:56