如何重塑 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 个交易日。
我正在阅读“使用 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 个交易日。