为什么 Pandas df.to_hdf("a_file", "a_key") 多次执行输出会变大

Why is Pandas df.to_hdf("a_file", "a_key") output increases in size when executed multiple times

Pandas 有一种方法 .to_hdf() 可以将 dataframe 保存为 HDF table。 但是,每次命令 .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()

如果您快速查看文档(2973 pdf 页长),则不会真正记录此行为。但可以在文档的 #1643, and in the warning in IO Tools section/delete from a table 部分找到: 如果你没有指定任何东西,默认的写入模式是'a'这是一个简单的df.to_hdf('a_path.h5','a_key')的情况,每次你运行 你的脚本。

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

但是,这种行为只会发生在 fixed 格式(默认格式)上,而不会发生在 table 格式上(除非 append 设置为 True).