Python 计算数据帧中的平均真范围列
我正在尝试将Average True Range列添加到包含历史股票数据的数据框中 我目前使用的代码是:Python 计算数据帧中的平均真范围列,python,pandas,technical-indicator,Python,Pandas,Technical Indicator,我正在尝试将Average True Range列添加到包含历史股票数据的数据框中 我目前使用的代码是: def add_atr_to_dataframe (dataframe): dataframe['ATR1'] = abs (dataframe['High'] - dataframe['Low']) dataframe['ATR2'] = abs (dataframe['High'] - dataframe['Close'].shift()) dataframe['
def add_atr_to_dataframe (dataframe):
dataframe['ATR1'] = abs (dataframe['High'] - dataframe['Low'])
dataframe['ATR2'] = abs (dataframe['High'] - dataframe['Close'].shift())
dataframe['ATR3'] = abs (dataframe['Low'] - dataframe['Close'].shift())
dataframe['TrueRange'] = max (dataframe['ATR1'], dataframe['ATR2'], dataframe['ATR3'])
return dataframe
包含max函数的最后一行给出了错误:
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
我已经在谷歌上搜索了几天,试图学习如何解决这个错误,或者以更好的方式编写代码,等等,但没有发现任何对我有帮助的东西
如果您在以下方面有任何帮助,我们将不胜感激:
提前感谢。我不太确定我是否明白你的意思,但我建议在有问题的行中使用而不是max() 不太确定我是否明白你的意思,但我建议在有问题的行中使用而不是max() tl;dr使用
dataframe[['ATR1', 'ATR2', 'ATR3']].max(axis=1)
解释 不能在对象上使用内置的
max
。由于传递给max
的第一个参数是iterable,因此调用max
的签名:
max
(iterable[,key])
这会隐式地对第一个参数执行\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu非零(truthiness)检查,以确定iterable是否为空,这就是错误的来源。Numpy和Pandas对象不会通过设计强制为布尔对象
您正在寻找类似以下内容:
dataframe['TrueRange'] = dataframe[['ATR1', 'ATR2', 'ATR3']].max(axis=1)
这将计算沿水平轴的ATR*
列的最大值,并将结果作为系列返回,然后将其作为新的TrueRange
列添加到数据帧中。tl;dr使用
dataframe[['ATR1', 'ATR2', 'ATR3']].max(axis=1)
解释
不能在对象上使用内置的max
。由于传递给max
的第一个参数是iterable,因此调用max
的签名:
max
(iterable[,key])
这会隐式地对第一个参数执行\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu非零(truthiness)检查,以确定iterable是否为空,这就是错误的来源。Numpy和Pandas对象不会通过设计强制为布尔对象
您正在寻找类似以下内容:
dataframe['TrueRange'] = dataframe[['ATR1', 'ATR2', 'ATR3']].max(axis=1)
这将计算沿水平轴的ATR*
列的最大值,并将结果作为系列返回,然后将其添加为数据帧中的新TrueRange
列。Igor,您的代码工作得非常好!非常感谢您以如此快速的响应和如此出色的解决方案!你刚刚结束了我几天的沮丧。没问题,请参阅编辑,了解你为什么会出现那个具体错误。而且,我在回答问题时太仓促了,你的问题有一个重复:)他们建议的解决方案是相同的。我一分钟前刚注意到这个重复,在谷歌搜索这个网站的几天里没有发现它-很抱歉我没有更早地找到它,再次感谢你花时间来帮我。Igor,你的代码工作得很好!非常感谢您以如此快速的响应和如此出色的解决方案!你刚刚结束了我几天的沮丧。没问题,请参阅编辑,了解你为什么会出现那个具体错误。而且,我在回答问题时太仓促了,你的问题有一个副本:)他们建议的解决方案是相同的我一分钟前才注意到这个副本,在谷歌搜索这个网站的几天里没有发现它-很抱歉我没有更早地找到它,再次感谢你花时间帮助我。谢谢你的建议。我曾经遇到过pd.max,但没有找到一种方法来逐行使用它。谢谢你的建议。我曾经遇到过pd.max,但没有找到一种逐行使用它的方法