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])