2016-02-04 48 views
0

我有布林帶算法的麻煩。我想將這個算法應用於我的時間序列數據。AttributeError:'list'對象沒有屬性'dtype'

的代碼:

length = 1440 

dataframe = pd.DataFrame(speed) 

ave = pd.stats.moments.rolling_mean(speed,length) 

sd = pd.stats.moments.rolling_std(speed,length=1440) 

upband = ave + (sd*2) 

dnband = ave - (sd*2) 

print np.round(ave,3), np.round(upband,3), np.round(dnband,3) 

輸入:

speed=[96.5, 97.0, 93.75, 96.0, 94.5, 95.0, 94.75, 96.0, 96.5, 97.0, 94.75, 97.5, 94.5, 96.0, 92.75, 96.5, 91.5, 97.75, 93.0, 96.5, 92.25, 95.5, 92.5, 95.5, 94.0, 96.5, 94.25, 97.75, 93.0] 

「AVE」 變量的結果:

[1440行×1列] 0 0的NaN 1的NaN 2 NaN 3 NaN 4 NaN 5 NaN 6的NaN 7的NaN 8的NaN 9的NaN 10的NaN 11的NaN 12的NaN 13的NaN 14的NaN 15的NaN 16的NaN 17的NaN

+1

據我瞭解的rolling_mean你應該通過一系列的文檔或數據框的rolling_mean,而不是一個列表。 (請參閱http://pandas.pydata.org/pandas-docs/stable/generated/pandas.rolling_mean.html#pandas.rolling_mean) –

+0

謝謝,我將列表轉換爲df,現在我有另一個錯誤。由於ave和sd變量,我得到了NaN結果。 @StefanReinhardt – serenade

+0

這是由長度attibute造成的... –

回答

1

的第一點是,正如我在媒體鏈接提到註釋rolling_mean需要一個數據幀 您可以通過ave = ...線之前插入線

speed = pd.DataFrame(data=speed) 

實現這一目標。 不過你也錯過了定義在rolling_std 窗口屬性(請參見:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.rolling_std.html

+0

我添加了速度= pd.DataFrame(數據=速度),但我再次得到NaN結果。 @StefanReinhardt – serenade