在大熊猫数据框架上使用ffill执行替换

时间:2018-06-19 07:32:41

标签: python pandas dataframe memory out-of-memory

我正在处理一个大到几千兆字节的pandas数据帧,并且在一些列中我存储了布尔值,我希望保留有关NaN的信息,以及之前{{3}中提出的建议我对这些列使用int8数据类型(其中1表示True0表示False-1表示{{1} }})。现在我想对此数据帧的执行NaN - 操作(并且仅对上面的布尔列执行)。但是,这个问题有两种不同的方法。说我有:

ffill

我想得到:

df_sel = df.loc[bool_cols]
>>> print(df_sel)
   0  1  2
0  1  0  1
1  1 -1 -1
2  0 -1 -1
3  0  0 -1
4  0  1 -1

以便行已向前填充。现在,在我使用 0 1 2 0 1 0 1 1 1 1 1 2 0 0 0 3 0 0 0 4 0 1 1 dtype之前,我可以使用int8,但由于内存优化,我不得不诉诸df_sel.fillna(method='ffill', axis=1),但问题是我不能给这个函数一个df_sel.replace(-1, method='ffill')参数,因此我只能填充列!

一个可能的解决方案是转置两次(axis=1),但由于我正在处理这么大的数据集,这在计算上很昂贵且需要很长时间。我已经用不同的方式提出了这个问题(没有提到我的数据框的大小),并且question建议使用df_sel.T.replace(-1, method='ffill').T,但我遇到了相同的内存问题(遇到df_sel.mask(df_sel == -1).ffill(axis=1)& #39; s等)因为当再次用MemoryError填充-1值时,它会回复到后面的float64。比两次转换数据帧以获得相同结果更好的方法。

0 个答案:

没有答案