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()
?
答案 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} }。