2017-02-19 24 views
2

我有一個包含數據採集的每一分鐘,從11月1日至11月15日的數據集的時間是一列,起始於11/1/2016 00:00:0011/15/2016 23:59:59 I am trying to reshape this dataset, so that each minute is a column, and each day is a row. So整理[第1行1列] would have the data at 12:00 on 11/1, and [第2行,第1列]`將在11/2的12:00處有數據,等等。目前,我的數據集麻煩重塑我的數據每天時間序列

我想使用重塑功能,如果我檢查值,他們不正確匹配。在我的代碼中,myData的第2列是我需要重塑的數據,而我有1440列,因爲這是一天中的分鐘數。還有15行,因爲那是我在數據集中的天數。

任何想法,我可能會出錯?

myData = pd.read_csv("Nov1-15.csv") 
myData = [myData.iloc[:,2]] 
myData = np.asarray(myData) 
myData = np.reshape(myData, (1440,15)) 
myData = np.transpose(myData) 

我的陣列,重塑後,目前看起來如下:

array([[ 137., 138., 136., ..., 345., 614., 337.], 
     [ 137., 137., 138., ..., 340., 611., 337.], 
     [ 138., 136., 138., ..., 373., 611., 336.], 
     ..., 
     [ 137., 138., 409., ..., 615., 336., 214.], 
     [ 136., 136., 412., ..., 614., 334., 214.], 
     [ 138., 136., 411., ..., 617., 339., 215.]]) 

我的原始數據集如下所示,之後我從CSV閱讀並隔離第二欄:

[0  137.0 
1  137.0 
2  138.0 
3  137.0 
4  136.0 
5  138.0 
6  137.0 
7  141.0 
8  137.0 
9  139.0 
10  136.0 
11  136.0 
12  137.0 
13  136.0 
14  138.0 
15  138.0 
16  137.0 
17  136.0 
18  138.0 
19  137.0 
20  137.0 
21  138.0 
22  138.0 
23  137.0 
24  135.0 
25  138.0 
26  138.0 
27  138.0 
28  136.0 
29  136.0 
      ... 
21570 614.0 
21571 611.0 
21572 611.0 
21573 611.0 
21574 610.0 
21575 570.0 
21576 346.0 
21577 341.0 
21578 337.0 
21579 337.0 
21580 336.0 
21581 337.0 
21582 336.0 
21583 334.0 
21584 339.0 
21585 337.0 
21586 337.0 
21587 336.0 
21588 238.0 
21589 222.0 
21590 222.0 
21591 220.0 
21592 217.0 
21593 217.0 
21594 214.0 
21595 214.0 
21596 278.0 
21597 214.0 
21598 214.0 
21599 215.0 

的樣本數據:

11/1/2016 0:00  213 
11/1/2016 0:01  214 
11/1/2016 0:02  213 
11/1/2016 0:03  213 
11/1/2016 0:04  210 
11/1/2016 0:05  210 
11/1/2016 0:06  209 
11/1/2016 0:07  209 
+0

你可以發表你的原始樣本(3-5行)嗎al CSV文件?你有'timestamp'列嗎? – MaxU

+1

我添加了一些示例數據。我的樣本數據中包含格式的時間戳列。 – Gary

回答

2

重塑:

嘗試改變:

myData = np.reshape(myData, (1440,15)) 

到:

myData = np.reshape(myData, (15, 1440)) 

演示:

3行,4列:

In [333]: np.arange(12).reshape(3,4) 
Out[333]: 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]]) 

4行, 3列:

In [334]: np.arange(12).reshape(4,3) 
Out[334]: 
array([[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11]]) 

大熊貓的解決方案:

使用pivot方法,如果你沒有滯後(丟失數據的分鐘數):

In [48]: df 
Out[48]: 
        ts val 
0 2016-11-16 00:00:00 213 
1 2016-11-16 00:01:00 214 
2 2016-11-16 00:02:00 213 
3 2016-11-16 00:03:00 213 
4 2016-11-16 00:04:00 210 
5 2016-11-16 00:05:00 210 
6 2016-11-16 00:06:00 209 
7 2016-11-16 00:07:00 209 

In [50]: df.assign(d=df.ts.dt.date, m=df.ts.dt.minute) \ 
      .pivot(index='d', columns='m', values='val') 
Out[50]: 
m    0 1 2 3 4 5 6 7 
d 
2016-11-16 213 214 213 213 210 210 209 209 

以其它方式使用pivot_table()方法:

In [52]: df.assign(d=df.ts.dt.date, m=df.ts.dt.minute) \ 
      .pivot_table(index='d', columns='m', values='val', aggfunc='mean', fill_value=0) 
Out[52]: 
m    0 1 2 3 4 5 6 7 
d 
2016-11-16 213 214 213 213 210 210 209 209 
+0

改變我的重塑到你的建議,工作:) – Gary