好的,我正在学习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,这就是我到目前为止所拥有的。
接下来我要做的是计算下一行(第二和第一行,第三和第二行等)之间的差异,并将其放在新列中,如下所示:
signals['positions'] = signals['signal'].diff()
这是我得到的错误: TypeError:-:“ builtin_function_or_method”和“ float”的不受支持的操作数类型
答案 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>