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()
?
最佳答案
如果您快速查看文档(有 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
设置为 True
)。
关于pandas - 为什么 Pandas df.to_hdf ("a_file", "a_key") 多次执行时输出大小会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54892676/