2017-04-02 118 views
0

對大熊貓來說是新的我在失去光滑的隨機數據生成例子的無數。pandas rolling max min意思是

我一直在努力實現的是使用bokeh創建帶滾動時間窗口的圖形。我想要X軸(重新採樣或其他)時間戳和3行顯示max,minmean值,讓我們說滾動15秒的時間窗口爲duration字段。

歡樂停止之前開始...我試圖申請很多例子沒有取得進展或學習很多。

下面

d2 = pd.read_csv(input_file, delimiter=",") 
d2["ts_send"] = pd.to_datetime(d2["ts_send"], \ 
format="%Y-%m-%d %H:%M:%S.%f", exact=True, utc=True) 

print (d2.head()) 
print (d2.rolling("15s", min_periods=1).mean().head()) 
print (d2.rolling("15s", min_periods=1).std().head()) 
print (d2.rolling("15s", min_periods=1).min().head()) 
print (d2.rolling("15s", min_periods=1).max().head()) 

的代碼產生的異常:

ValueError: window must be an integer

如果我能得到滾動的東西的工作,我可能可以管理bokeh側。

任何支持實現這一點的指針都會受到高度讚賞!

我在CSV這樣的數據:

 
ts_send,endpoint,duration, 
2017-01-19 09:03:28.600,/api/sig,1.0 
2017-01-19 09:03:29.760,/api/sig,0.5 
2017-01-19 09:04:51.210,/api/sig,0.508 
2017-01-19 09:04:52.410,/api/sig,0.574 
2017-01-19 09:09:32.854,/api/sig,1.0 
2017-01-19 09:09:36.776,/api/sig,0.637 
2017-01-19 09:14:14.207,/api/sig,0.672 
2017-01-19 09:14:16.906,/api/sig,0.533 
2017-01-19 11:49:34.939,/api/sig,1.0 
2017-01-19 11:49:38.709,/api/sig,0.529 
2017-01-19 12:19:01.668,/api/sig,1.0 
2017-01-19 12:19:05.559,/api/item,0.169 
2017-01-19 12:19:05.559,/api/item,0.102 
2017-01-19 12:19:05.559,/api/item,0.44 
2017-01-19 12:19:05.585,/api/item,0.173 
2017-01-19 12:19:06.633,/api/sig,0.564 
2017-01-19 12:27:05.712,/api/sig,0.574 
2017-01-19 12:27:08.370,/api/sig,0.497 
2017-01-19 12:27:43.319,/api/sig,0.561 
2017-01-19 12:27:45.873,/api/sig,0.508 
2017-01-19 12:46:15.454,/api/sig,1.0 
2017-01-19 12:46:20.409,/api/item,0.173 
2017-01-19 12:46:20.427,/api/item,0.163 
2017-01-19 12:46:20.457,/api/item,0.169 
2017-01-19 12:46:20.474,/api/item,0.162 
2017-01-19 12:46:20.618,/api/item,0.209 
2017-01-19 12:46:20.642,/api/item,0.172 
2017-01-19 12:46:20.695,/api/item,0.26 
2017-01-19 12:46:20.698,/api/item,0.193 
2017-01-19 12:46:20.788,/api/item,0.193 
2017-01-19 12:46:20.822,/api/item,0.232 
2017-01-19 12:46:20.873,/api/item,0.164 
2017-01-19 12:46:20.875,/api/item,0.142 
2017-01-19 12:46:20.905,/api/item,0.356 
2017-01-19 12:46:20.998,/api/item,0.199 

時間戳ts_send是毫秒precission。有些時候沒有記錄事件,有時候在一毫秒內有多個事件。

+0

根據文檔字符串'window'必須是'int'除非你有一個'DatetimeIndex'(你不這樣做)。 – Goyo

+0

我試着明確地應用'd2.index = pd.DatetimeIndex(d2.ts_send,inplace = True)',這在我的理解中類似於下面的@Bouds建議。它引發了一個異常'ValueError:索引必須是單調的' – numibialainen

回答

0

如果你的時間系列是索引,這將工作。添加此代碼之前,您運行您的代碼:

d2.set_index('ts_send', inplace=True) 
+0

謝謝你的提示!不幸的是,它不適合我。我得到了'ValueError:index must be monotonic' – numibialainen

+0

問題給你:你明白'monotonic'的意思嗎? – Boud

+0

直到現在我還沒有。所以,這不是單調的。請看看如何製作或轉換當前的索引單調。 – numibialainen

0

感謝親切會員佈德和Goyo我能夠前進。

的代碼產生什麼,我需要:

d2 = pd.read_csv(input_file, delimiter=",") 
d2["ts_send"] = pd.to_datetime(d2["ts_send"], format="%Y-%m-%d %H:%M:%S.%f", exact=True, utc=True) 
d2.index = pd.DatetimeIndex(d2.ts_send, inplace=True) 
d3 = d2.sort_index() 
d3.drop(d3.columns[0],axis=1,inplace=True) 

print (d3.index.is_monotonic_increasing) 
print (d3.head()) 

print (d3.rolling("5s", min_periods=1).mean()) 
print (d3.rolling("5s", min_periods=1).std()) 
print (d3.rolling("5s", min_periods=1).min()) 
print (d3.rolling("5s", min_periods=1).max())