使用Pandas使用Series创建DataFrame,导致内存错误

时间:2013-06-18 09:32:03

标签: python numpy pandas

我正在使用Pandas库进行遥感时间序列分析。最后我想通过使用chunk-sized将我的DataFrame保存到csv,但我遇到了一个小问题。我的代码生成了6个NumPy数组,我将其转换为Pandas系列。这些系列中的每一个都包含很多项目

>>> prcpSeries.shape
(12626172,)

我想将系列添加到Pandas DataFrame(df)中,这样我就可以将它们按块保存到csv文件中。

d = {'prcp': pd.Series(prcpSeries),
     'tmax': pd.Series(tmaxSeries),
     'tmin': pd.Series(tminSeries),
     'ndvi': pd.Series(ndviSeries),
     'lstm': pd.Series(lstmSeries),
     'evtm': pd.Series(evtmSeries)}

df = pd.DataFrame(d)
outFile ='F:/data/output/run1/_'+str(i)+'.out'
df.to_csv(outFile, header = False, chunksize = 1000)
d = None
df = None

但我的代码卡在以下行给出内存错误

df = pd.DataFrame(d)

有什么建议吗?是否可以按块填充Pandas DataFrame块?

1 个答案:

答案 0 :(得分:20)

如果您知道每个长度相同,那么您可以直接从数组创建DataFrame,然后附加每列:

df = pd.DataFrame(prcpSeries, columns=['prcp'])
df['tmax'] = tmaxSeries
...

注意:您也可以使用to_frame方法(允许您(可选)传递名称 - 如果系列没有名称,这很有用):

df = prcpSeries.to_frame(name='prcp')

但是,如果它们是可变长度,则会丢失一些数据(任何长度超过prcpSeries的数组)。这里的另一种方法是将每个创建为DataFrame,然后执行外连接(使用concat):

df1 = pd.DataFrame(prcpSeries, columns=['prcp'])
df2 = pd.DataFrame(tmaxSeries, columns=['tmax'])
...

df = pd.concat([df1, df2, ...], join='outer', axis=1)

例如:

In [21]: dfA = pd.DataFrame([1,2], columns=['A'])

In [22]: dfB = pd.DataFrame([1], columns=['B'])

In [23]: pd.concat([dfA, dfB], join='outer', axis=1)
Out[23]:
   A   B
0  1   1
1  2 NaN