pandas 追加一系列2d numpy数组以创建3d numpy数组

62lalag4  于 2023-09-29  发布在  其他
关注(0)|答案(1)|浏览(104)

我以为这是一个简单的问题,但我一直在努力解决它。
我有一个4列的dataframe(打开,高,低,关闭)。
我需要反复选择

  • 100次
  • 一批75行
  • 每个具有4列。使得最终形状为(100,75,4)

我试过np.append, np.stack, np.dstack, np.concatenate。都不管用
np.append中我得到一个形状(7500,4)
np.stack中,在第二次迭代中,所有输入数组必须具有相同的形状(因为在第一次堆栈之后,原始数组的形状是不同的)。
我的最后一个代码与np.stack(不把其他尝试):

for i in range (100):
  print(i)
  if (i==0):
    temp_array=timeseries[['Open','High','Low','Close']].iloc[i:i+75].to_numpy()
  else:
    temp_temp_array=np.stack([temp_array,timeseries[['Open','High','Low','Close']].iloc[i:i+75].to_numpy()])
    temp_array=temp_temp_array
  print(temp_array.shape)

似乎stackoverflow/internet没有答案(或者可能是我没有问正确的问题)。

sqserrrh

sqserrrh1#

正如Quang所建议的,你可以在这里使用步幅来提高速度和记忆力(!)效率:

X = df.values
rolling_X = np.lib.stride_tricks.as_strided(X, shape=(X.shape[0],75,X.shape[1]), strides=(X.strides[0], X.strides[0], X.strides[1]))

编辑:
要屏蔽某些列,可以先在嵌套框上执行:

X = df[['High']].values

或者,为了提高速度,你可以使用numpy索引查找:

X = df.values[:,[1]]

相关问题