我正在使用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块?
答案 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