繁体   English   中英

如何在不制作副本的情况下缩小熊猫DataFrame的大小?

[英]how to downsize a pandas DataFrame without making a copy?

我有内存问题,我想缩小我加载的数据的read_stata()可悲的是,使用read_stata()只能排几行)。 我可以更改下面的代码以仅将一些行用于X和y,但不进行复制吗? 即使暂时无法达到目的,我也想节省内存,而不是再增加任何空间。 还是可能先缩小数据的大小(如果您指定的大小小于原始大小,“重塑”会在没有副本的情况下进行吗?)然后选择一些列?

data = pd.read_stata('S:/data/controls/notreat.dta')
X = data.iloc[:,1:]
y = data.iloc[:,0]

我感到你很痛苦。 Pandas不是一个内存友好的库,而500Mb可以迅速变为> 16Gb并降低性能。

但是,对我有用的一件事是memmap。 您可以使用memmap在numpy数组和矩阵中分页,其速度几乎与数据总线所允许的速度一样。 另外,可以卸载未使用的页面。

详情请参阅这里 通过一些工作,这些memmap np数组可用于备份pd.Series或pd.DataFrame而无需复制。 但是,您可能会发现Pandas稍后会继续复制您的数据。 因此,我的建议是:创建一个memmap文件,并保留在numpy-land中。

您的另一种选择是使用HDFS。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM