股票交易回测问题。 AttributeError:“Series”对象没有属性“iteritems”

问题描述 投票:0回答:1

我正在运行 Stefan Jansen 的书“算法交易的机器学习”第二版中的一些代码,特别是在第 1 章中。 5,第 2 节。“backtest_with_pf_optimization”使用 Visual Studio Code 中的 forked Github Repo,来自此处的原始源

我一直遇到一个问题,我无法迭代 DataFrame 中的回测结果,因为我想要迭代的特定列实际上是“Series”对象而不是“DataFrame”。

returns, positions, transactions = extract_rets_pos_txn_from_zipline(backtest)

返回以下错误:

AttributeError                            Traceback (most recent call last)
/tmp/ipykernel_3528/3074314327.py in ?()
----> 1 returns, positions, transactions = extract_rets_pos_txn_from_zipline(backtest)

~/.python/current/lib/python3.10/site-packages/pyfolio/utils.py in ?(backtest)
    151     if backtest.index.tzinfo is None:
    152         backtest.index = backtest.index.tz_localize('UTC')
    153     returns = backtest.returns
    154     raw_positions = []
--> 155     for dt, pos_row in backtest.positions.iteritems():
    156         df = pd.DataFrame(pos_row)
    157         df.index = [dt] * len(df)
    158         raw_positions.append(df)

~/.local/lib/python3.10/site-packages/pandas/core/generic.py in ?(self, name)
   6292             and name not in self._accessors
   6293             and self._info_axis._can_hold_identifiers_and_holds_name(name)
   6294         ):
   6295             return self[name]
-> 6296         return object.__getattribute__(self, name)

AttributeError: 'Series' object has no attribute 'iteritems'

我已经通过运行

print(type(backtest['column_name']))
验证了问题中的每一列确实是“系列”,但我无法理解为什么会发生这种情况。查看
extract_rets_pos_txn_from_zipline()
方法 (link) 的源文档表明
returns, positions, transactions
的预期输出应分别为
Series, DataFrame, DataFrame

我不确定为什么这些特定对象没有作为 DataFrame 对象返回,并且它阻止我执行更多文件。

有没有办法解决这个问题?

python pandas dataframe attributeerror
1个回答
0
投票

如果您只想在回测中使用

column_name
,则需要使用
backtest.loc[:, ['column_name]]
,它返回
pd.DataFrame
而不是
pd.Series

© www.soinside.com 2019 - 2024. All rights reserved.