将pandas数据框中的大数组转换为大numpy数组

时间:2019-01-29 15:10:34

标签: python-3.x pandas numpy

我有一个日期框架,其中的列如下所示:

0         [  [    1051,    0,    10181,    62,    17,   ...
1         [  [    882,    0,    9909,    59,    23,    9...
2         [  [    1061,    0,    10192,    60,    17,   ...
3         [  [    122,    4,    501,    2,    8,    3,  ...
4         [  [    397,    1,    859,    9,    8,    5,  ...
5         [  [    1213,    1,    10791,    23,    17,   ...
6         [  [    1395,    3,    11147,    0,    17,    ...
7         [  [    757,    3,    1900,    34,    23,    8...
8         [  [    129,    0,    507,    10,    8,    3, ...
9         [  [    1438,    0,    11177,    26,    2,    ...
10        [  [    1272,    1,    10901,    7,    17,    ...

具有较少功能的示例行将如下所示:

[[1,2,3,4],[2,3,4,5],[3,4,5,6]]

数据类型是一个字符串,因此必须使用json.loads将它们转换为[N_TIMESTAMPS,N_FEATURES]的数组,其中每个功能都是一个数值。

为了使用此数据作为神经网络的输入,我必须将此列转换为以下形状的numpy数组:[N_SAMPLES,N_TIMESTAMPS,N_FEATURES]。因此,像这样:

[[[1,2,3,4],[2,3,4,5],[3,4,5,6]],[[1,2,3,4],[2,3,4,5],[3,4,5,6]]]

这就是我现在的做法:

train_x = np.array(
   df.time_stream.apply(json.loads).apply(np.array).apply(
      lambda x: x.reshape(N_TIMESTAMPS,N_FEATURES).tolist()).values.tolist()
 )

对于具有268,521行的数据集,此计算需要12.5分钟。并不理想,但确实可行。但是,它不可扩展。对于具有756,961行的新数据集,它永远不会完成(N_TIMESTAMPS = 100; N_FEATURES = 54),因为它耗尽了所有RAM,并且计算机崩溃了。

我正在寻找有关如何使其更快或更有效地使用内存的建议。一个问题是正在使用大量交换。

0 个答案:

没有答案