Pandas 熊猫:使用“应用”将单列数组拆分为列时出现内存错误

Pandas 熊猫:使用“应用”将单列数组拆分为列时出现内存错误,pandas,out-of-memory,apply,Pandas,Out Of Memory,Apply,我想知道是否有人有一个快速修复的内存错误,出现时,做同样的事情,如下面的例子对更大的数据 例如: import pandas as pd import numpy as np nRows = 2 nCols = 3 df = pd.DataFrame(index=range(nRows ), columns=range(1)) df2 = df.apply(lambda row: [np.random.rand(nCols)], axis=1) df3 = pd.concat(df2.a

我想知道是否有人有一个快速修复的内存错误,出现时,做同样的事情,如下面的例子对更大的数据

例如:

import pandas as pd
import numpy as np

nRows = 2
nCols = 3

df = pd.DataFrame(index=range(nRows ), columns=range(1))

df2 = df.apply(lambda row: [np.random.rand(nCols)], axis=1)

df3 = pd.concat(df2.apply(pd.DataFrame, columns=range(nCols)).tolist())
创建df3时,我得到内存错误

示例中的DF为:

df
     0
0  NaN
1  NaN

df2
0    [[0.6704675101784022, 0.41730480236712697, 0.5...
1    [[0.14038693859523377, 0.1981014890848788, 0.8...
dtype: object

df3
          0         1         2
0  0.670468  0.417305  0.558690
0  0.140387  0.198101  0.800745

首先,我认为在pandas中使用
list
s不是,如果可能的话,您可以避免它

因此,我相信您可以大大简化代码:

nRows = 2
nCols = 3

np.random.seed(2019)
df3 = pd.DataFrame(np.random.rand(nRows, nCols))
print (df3)
          0         1         2
0  0.903482  0.393081  0.623970
1  0.637877  0.880499  0.299172

下面是一个解决问题的示例(请注意,在这个示例中,列中不使用列表,而是使用数组。这是我无法避免的,因为我最初的问题是列中的列表或数组)


问题是我已经有了这些清单。我根据以下链接中的答案创建了这些列表:如果您知道避免创建列表的方法,并且仍然在链接中的示例中获得多个列,请让我知道!
import pandas as pd
import numpy as np
import time
np.random.seed(1)

nRows = 25000
nCols = 10000
numberOfChunks = 5

df = pd.DataFrame(index=range(nRows ), columns=range(1))

df2 = df.apply(lambda row: np.random.rand(nCols), axis=1)

for start, stop in zip(np.arange(0, nRows , int(round(nRows/float(numberOfChunks)))), 
                       np.arange(int(round(nRows/float(numberOfChunks))), nRows +  int(round(nRows/float(numberOfChunks))), int(round(nRows/float(numberOfChunks))))):
    df2tmp = df2.iloc[start:stop]
    if start == 0:
        df3 = pd.DataFrame(df2tmp.tolist(), index=df2tmp.index).astype('float16')
        continue
    df3tmp =  pd.DataFrame(df2tmp.tolist(), index=df2tmp.index).astype('float16')
    df3 = pd.concat([df3, df3tmp])