第一次保存为.h5后,数据帧大小会增加

问题描述 投票:0回答:1

第一次将pandas数据帧文件保存为.h5后,文件大小显着增加。如果保存加载的数据帧,文件大小不会再次增加。这让我怀疑是第一次保存某种元数据。这种折痕是什么原因?

是否有避免这种情况的简便方法?

我可以压缩文件,但是我不进行压缩就进行比较。通过压缩,问题的规模会有所不同吗?

下面的示例代码。文件大小从15.3 MB增加到22.9 MB

import numpy as np
import pandas as pd
x = np.random.normal (0,1, 1000000)
y = x*2
dataset = pd.DataFrame({'Column1': x, 'Column2': y})
print (dataset.info(memory_usage='deep'))
dataset.to_hdf('data.h5', key='df', mode='w')
dataset2 = pd.read_hdf("data.h5")
print (dataset2.info(memory_usage='deep'))
dataset2.to_hdf('data2.h5', key='df', mode='w')
dataset3 = pd.read_hdf("data2.h5")
print (dataset3.info(memory_usage='deep'))

输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000000 entries, 0 to 999999
Data columns (total 2 columns):
Column1    1000000 non-null float64
Column2    1000000 non-null float64
dtypes: float64(2)
memory usage: 15.3 MB
None
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000000 entries, 0 to 999999
Data columns (total 2 columns):
Column1    1000000 non-null float64
Column2    1000000 non-null float64
dtypes: float64(2)
memory usage: 22.9 MB
None
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000000 entries, 0 to 999999
Data columns (total 2 columns):
Column1    1000000 non-null float64
Column2    1000000 non-null float64
dtypes: float64(2)
memory usage: 22.9 MB
None

正在发生,因为在保存时RangeIndex被转换为Int64Index。有没有办法对此进行优化?似乎无法删除索引:

https://github.com/pandas-dev/pandas/issues/8319

pandas hdf5
1个回答
0
投票

到目前为止,我发现最好的解决方案是将其保存为泡菜:

dataset.to_pickle("datapkl.pkl")

不太方便的选择是转换为numpy并保存为h5py,但是随后加载并转换回熊猫需要大量时间

a = dataset.to_numpy()
h5f = h5py.File('datah5.h5', 'w')
h5f.create_dataset('dataset_1', data=a)
© www.soinside.com 2019 - 2024. All rights reserved.