我正在从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任务管理器的实际内存使用量大约是info
中pandas
函数指示的两倍。这种额外的内存使用在以后的计算中导致MemoryError。有谁知道这种行为的原因?或者有没有人建议如何调试&#34;幻像&#34;内存使用情况?
答案 0 :(得分:0)
info
函数只调用numpy.nparray.nbytes
乘以nitemsize
(数据类型的大小,例如int64的8个字节)和数组的长度。问题可能来自object
数据类型。
Numpy拥有丰富的类型系统:Array types and conversions between types
,Data type objects,您可以利用它来提高内存效率。您可以将数据框中的所选列(例如,从默认float64
转换为float32
或int32
或unsigned int32
和object
转换为更短的字符串类型构造函数,例如np.dtype('a25')
- 25个字符的字符串,正如我测试过的那样,实际上在我的Win7上释放了一些内存。