pandas DataFrame大小与windows内存使用量不一致

时间:2015-09-17 23:19:37

标签: python memory pandas

我正在从hdf5文件中读取DataFrame:

import pandas as pd
store = pd.HDFStore('some_file.h5')
df= store['df']
store.close()

使用info显示:

In [11]: df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 21423657 entries, 0 to 21423656
Data columns (total 5 columns):
date      datetime64[ns]
name      object
length    float64
flag1     object
flag2     object
dtypes: datetime64[ns](1), float64(1), object(3)
memory usage: 980.7+ MB

hdf5约为1GB,df.info()也显示约1GB的memory usage。但是,在DataFrame中读取后,Windows任务管理器的物理内存使用量增加了2GB以上。一般来说,我发现Windows任务管理器的实际内存使用量大约是infopandas函数指示的两倍。这种额外的内存使用在以后的计算中导致MemoryError。有谁知道这种行为的原因?或者有没有人建议如何调试&#34;幻像&#34;内存使用情况?

1 个答案:

答案 0 :(得分:0)

info函数只调用numpy.nparray.nbytes乘以nitemsize(数据类型的大小,例如int64的8个字节)和数组的长度。问题可能来自object数据类型。

Numpy拥有丰富的类型系统:Array types and conversions between types Data type objects,您可以利用它来提高内存效率。您可以将数据框中的所选列(例如,从默认float64转换为float32int32unsigned int32object转换为更短的字符串类型构造函数,例如np.dtype('a25') - 25个字符的字符串,正如我测试过的那样,实际上在我的Win7上释放了一些内存。