如何重塑 pandas DataFrame

How to reshape pandas DataFrame

我正在阅读“使用 Scikit-Learn、Keras 和 TensorFlow 进行机器学习实践”一书。其中有一节是关于时间序列预测的。我很感兴趣将该方法应用于盘中股票指数价格数据。 我的数据如下所示:

In [229]: frame.tail()
Out[229]: 
               O        H        L        C         Day      Time
1472543  4017.50  4018.39  4013.52  4014.38  2022-05-13  15:55:00
1472544  4014.68  4018.05  4014.68  4017.20  2022-05-13  15:56:00
1472545  4017.13  4019.95  4017.01  4019.83  2022-05-13  15:57:00
1472546  4019.86  4021.55  4017.94  4021.32  2022-05-13  15:58:00
1472547  4021.21  4024.77  4020.72  4023.56  2022-05-13  15:59:00

每天有 390 个“观察”,共有 3751 天。我想将此数据重塑为以下形式:(3751, 390, 4).

原因是书中数据的形状是:(7000,50,1)。基于此,如果我的数据具有相同的形状,那么将书中的方法应用于我的数据集将是最容易的。

然而,我已经尝试了几种不同的方法(已经好几天了),但都没有成功。

我尝试制作一个 numpy.array() 日期 (3751) 和一个时间 (390) 以及一个价格值(即每一天的形状为 (1,390,4)) . 然而,这没有用:

In [255]: c = []

In [257]: c.append(frame["Day"].unique())

In [258]: c.append(frame["Time"].unique())

In [259]: c.append(frame[features])

In [273]: np.array(c, dtype=object).reshape(3751,390,4)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-273-ddd7578e8519> in <module>
----> 1 np.array(c, dtype=object).reshape(3751,390,4)

ValueError: cannot reshape array of size 3 into shape (3751,390,4)

In [248]: x = np.array([frame["Day"].unique,frame["Time"].unique(),frame[["O","H","L","C"]]], dtype=object)

In [249]: x.shape
Out[249]: (3,)

In [250]: frame["Day"].unique().shape
Out[250]: (3751,)

In [251]: frame["Time"].unique().shape
Out[251]: (390,)

In [252]: frame[features].shape
Out[252]: (1462890, 4)

In [253]: 390 * 3751
Out[253]: 1462890

In [254]: features
Out[254]: ['O', 'H', 'L', 'C']

在评论中,@pavel 提供:frame.values.reshape((3751, 390, 4))

和@wjandrea 提供:frame.iloc[:, :-2].values...frame[features].values...

后者非常有效:

frame[features].values.reshape((len(days), 390, 4))

其中 days 这里是一个数组,其中包含所有完整的 non-holiday 个交易日。