无法为每日时间序列重塑我的数据

时间:2017-02-19 22:35:15

标签: python pandas numpy reshape

我有一个数据集,其中包含从11月1日到11月15日每分钟收集的数据。时间是一列,从11/1/2016 00:00:00开始,到11/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列] {{ 1}} [第2行,第1列]`数据将在11月12日的12:00,等等。目前,我的数据集

我正在尝试使用reshape函数,如果我检查值,它们就无法正确匹配。在我的代码中,would have the data at 12:00 on 11/1, and的第2列是我需要重新整形的数据,我有1440列,因为这是一天中的分钟数。 15行,因为这是我在数据集中的天数。

我知道哪里出错了?

myData

我的数组在重塑之后,目前看起来如下:

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)

我从csv读取并隔离第二列后,我的原始数据集如下所示:

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.]])

示例数据:

[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

1 个答案:

答案 0 :(得分: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