为什么熊猫df.to_hdf(“ a_file”,“ a_key”)输出多次执行时大小会增加

时间:2019-02-26 19:23:22

标签: pandas hdf

Pandas有一种方法.to_hdf()dataframe保存为HDF表。 但是,每次运行命令.to_hdf(path, key)时,文件的大小都会增加。

import os
import string
import pandas as pd
import numpy as np

size = 10**4
df = pd.DataFrame({"C":np.random.randint(0,100,size), 
                   "D": np.random.choice(list(string.ascii_lowercase), size = size)})
for iteration in range(4):
    df.to_hdf("a_file.h5","key1")
    print(os.path.getsize("a_file.h5"))

输出清楚地表明文件的大小正在增加:

# 1240552
# 1262856
# 1285160
# 1307464

由于每次都会保存新的df,因此hdf的大小应保持不变。

对于小df而言,增加幅度似乎不大,而随着df的增大,它会很快导致hdf文件大大大于首次保存时的文件大小。

经过7次迭代后,我得到10 ** 7长数据帧的大小:

29MB, 48MB, 67MB, 86MB, 105MB, 125MB, 144MB

为什么HDF文件的大小不是恒定的,并增加每个新的to_hdf()

1 个答案:

答案 0 :(得分:1)

如果您快速浏览文档(此文档长2973 pdf页),则不会真正记录此行为。但是可以在#1643和文档的IO Tools section/delete from a table部分的警告中找到: 如果您未指定任何内容,则默认的写入模式为'a',这是简单的df.to_hdf('a_path.h5','a_key')的情况,每次运行脚本时,HDF文件的大小几乎都会增加一倍。

解决方案将使用写入模式:df.to_hdf('a_path.h5','a_key', mode = 'w')

但是,此行为仅会以fixed格式(默认格式)发生,而不会以table格式发生(除非append设置为{{1} }。