Pandas DataFrame,不能使用内置函数-不支持的操作数类型

时间:2018-12-23 00:49:00

标签: python pandas

好的,我正在学习Pandas DataFrame并试图逐行获取差异。 这是我的代码

import pandas as pd
short_window = 40
long_window = 100
signals = pd.DataFrame(index=aapl.index)
signals['signal'] = 0.0

signals['short_mavg'] = aapl['Adj Close'].rolling(window = short_window, min_periods=1, center=False).mean()
signals['long_mavg'] = aapl['Adj Close'].rolling(window = long_window, min_periods=1, center=False).mean()
signals.fillna(0, inplace=True)

signals['signal'][short_window:] = np.where(signals['short_mavg'][short_window:] > signals['long_mavg'][short_window:], 1.0, 0.0)

现在一切都OK,这就是我到目前为止所拥有的。

enter image description here

接下来我要做的是计算下一行(第二和第一行,第三和第二行等)之间的差异,并将其放在新列中,如下所示:

signals['positions'] = signals['signal'].diff()

这是我得到的错误: TypeError:-:“ builtin_function_or_method”和“ float”的不受支持的操作数类型

2 个答案:

答案 0 :(得分:2)

您的数据集有问题,您的代码应该可以工作。由于某种原因,您的signals['signal']中混合使用了float和方法。这是适用于任何人的完整代码:

import pandas as pd
import quandl as qdl

qdl.ApiConfig.api_key = 'your key' # freely available, registration is needed

signals = qdl.get("WIKI/AAPL")
signals['signal'] = 0.0
signals['short_mavg'] = signals['Adj. Close'].rolling(window = short_window, min_periods=1, center=False).mean()
signals['long_mavg'] = signals['Adj. Close'].rolling(window = long_window, min_periods=1, center=False).mean()
signals['signal'][short_window:] = np.where(signals['short_mavg'][short_window:] > signals['long_mavg'][short_window:], 1.0, 0.0)
signals['positions'] = signals['signal'].diff()

检查它是否适合您。

答案 1 :(得分:0)

我找到了解决方案,我不得不编写如下代码:

signals['signal'][short_window:] = np.where(signals['short_mavg'][short_window:] > signals['long_mavg'][short_window:], 1.0, 0.0)

没有在行中中断代码。我在jupyter笔记本中编写此代码,是因为我刚刚开始学习,并且更容易编写注释,并且由于易于阅读,我正在拆分代码,这是我第一次遇到问题。 / p>