我有RAM问题,我想缩小我加载的数据(使用read_stata()
,你不仅可以使用几行,不幸的是)。我可以更改下面的代码,只使用X和y的某些行,但不能复制吗?即使暂时失败了,我也希望节省内存,而不是增加我的足迹。或者可能首先缩小数据的大小(如果指定的尺寸小于原始尺寸,那么“重塑”不做副本吗?)然后选择一些列?
data = pd.read_stata('S:/data/controls/notreat.dta')
X = data.iloc[:,1:]
y = data.iloc[:,0]
答案 0 :(得分:0)
我感觉到你的痛苦。 Pandas不是一个对内存友好的库,500Mb可以快速转换为> 16Gb并破坏性能。
然而,对我有用的一件事是memmap。您可以使用memmap在numpy数组和矩阵中进行分页,速度与数据总线允许的速度一样快。另外,可以卸载未使用的页面。
见here for details。通过一些工作,这些memmap np数组可用于支持pd.Series或pd.DataFrame而无需复制。但是,您可能会发现Pandas稍后会在您继续时复制数据。所以,我的建议是:创建一个memmap文件,并保持在numpy-land。
您的另一种选择是使用HDFS。