为什么hdf5文件占用的磁盘空间比熊猫内存中的pandas数据帧占用的空间大?

时间:2018-07-23 14:02:40

标签: python pandas dataframe hdf5

我有一个占用4 MB内存的pandas数据帧:

>>> df.memory_usage(deep=True).sum() / (1024 ** 2)
>>> 3.9931907653808594

当我将此数据帧保存到hdf5文件时,它在磁盘上占用的空间为21.1 MB:

>>> df.to_hdf('my_data.hdf5', key='df', format='table')

有人可以解释原因吗?

df.info()返回:

<class 'pandas.core.frame.DataFrame'>
Float64Index: 1440 entries, 1262300460.0 to 1262386800.0
Columns: 879 entries,
dtypes: category(212), float32(667)
memory usage: 4.0 MB

df.dtypes.unique()返回:

array([dtype('float32'),
       CategoricalDtype(categories=['Closing', 'Off'], ordered=False),
       CategoricalDtype(categories=['Active'], ordered=False),
       CategoricalDtype(categories=['-'], ordered=False),
       CategoricalDtype(categories=[], ordered=False),
       CategoricalDtype(categories=['Active', 'Off'], ordered=False),
       CategoricalDtype(categories=['Low', 'Off'], ordered=False),
       CategoricalDtype(categories=['Low'], ordered=False)], dtype=object)

编辑7.24.2018,回复@jpp

  1. 如果将数据框的类别列转换为整数数据类型,则该数据框将占用4MB的内存。当我将其保存为hdf格式时,它需要4.3 MB的磁盘空间。

这是将分类列转换为整数数据类型的方法:

for col in df.columns[df.dtypes == 'category']:
    df[col] = df[col].cat.codes
  1. 如果将数据框的类别列转换为“对象”数据类型,则该数据框将占用24 MB的内存。当我将其保存为hdf格式时,它需要9.7 MB磁盘空间。

0 个答案:

没有答案