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

Mat*_*ijn 19 python numpy pandas

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

>>> prcpSeries.shape
(12626172,)
Run Code Online (Sandbox Code Playgroud)

我想将系列添加到Pandas DataFrame(df)中,这样我就可以通过chunk将它们保存到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
Run Code Online (Sandbox Code Playgroud)

但是我的代码卡在下面一行给出内存错误

df = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)

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

And*_*den 20

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

df = pd.DataFrame(prcpSeries, columns=['prcp'])
df['tmax'] = tmaxSeries
...
Run Code Online (Sandbox Code Playgroud)

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

df = prcpSeries.to_frame(name='prcp')
Run Code Online (Sandbox Code Playgroud)

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

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

df = pd.concat([df1, df2, ...], join='outer', axis=1)
Run Code Online (Sandbox Code Playgroud)

例如:

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
Run Code Online (Sandbox Code Playgroud)