有没有一种有效的方法可以将DataFrame列表转换为Numpy数组?

时间:2019-10-16 10:19:06

标签: python numpy

我目前有一些时间序列数据,已将其分为几批以供深度学习模型使用。我拥有的整个CSV文件的大小约为(33000, 149),并且我正在尝试以滑动窗口的方式从这些数据中制作由甚至更小的(100, 40)大小的微型批处理组成的批次。

我将拥有的整体数据是一个嵌套的字典,看起来像这样:

data[fold][day][batch][minibatch]
  1. fold指的是我们正在使用的CSV文件(共有9个文件),
  2. day是指我们在哪一天(批总数将根据天数平均分配),
  3. batch是构成一天的批次,
  4. minibatch基本上是包含32个“窗口”的列表,每个窗口的大小为(100, 40)

例如,如果第一个CSV文件有33,000行,那么我会:

  1. 在行中循环浏览并设置一个计数器,计数到32。
  2. 一旦计数器达到32,我会将列表minibatches附加到列表batch
  3. 将所有这些迷你批次添加后,我计算出一批应均匀地容纳多少天。

我编写的代码如下:

batches = []
minibatches = np.empty(shape=(32, 100, 41))
count = 1

df = data[0] # First CSV file DataFrame.

start = time.time()
idx_end = df.shape[0] - 100
for idx in range(idx_end):
    dataframe = df.iloc[idx:(idx + 100)] # Get 100 rows for each window.
    minibatches[count - 1] = dataframe # Append the window to the corresponding index.
    if count == 32: # Append the minibatches to batch once it reaches 32.
        batches.append(minibatches)
        minibatches = np.empty(shape=(32, 100, 41))
        count = 0
    count += 1

end = time.time() - start
print('Took about {0:.2f} seconds.'.format(end))

整个代码块花费了1805秒(30分钟),这真是出乎意料。在使用np.empty之前,我使用的是普通列表,其性能要好得多(通常少于30秒)。

我尝试这段代码的原因是,如果我要将数据馈入模型,则数据的大小应为(32, 100, 40),并且我想不出任何其他方法来转换包含DataFrames的列表到一个Numpy数组。

是否有更有效的方法将包含DataFrames的列表转换为Numpy数组?

0 个答案:

没有答案