pandas - 为什么 Pandas df.to_hdf ("a_file", "a_key") 多次执行时输出大小会增加

标签 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()

最佳答案

如果您快速查看文档(有 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/

相关文章:

python - 在 pandas 中使用回归?

python - 获取 Pandas 系列的最后一个完整序列

python - 在保留原始列标题的同时旋转列

python - 如何管理多层字典,自定义列,减去列数据,添加新列?

python - 使用 h5py 将外部原始文件链接到 hdf5 文件

python - Pandas Dataframe 到元组字典

python - 使用 python 读取 HDF4 文件 - 多个同名数据集

hadoop - Mapreduce中的随机播放错误:本地提取程序中的随机播放错误

python - 在 HDF5 C++ api 中使用 GZIP 压缩时,是否默认启用自动分块?

java - 使用Hadoop/HDFS进行100万个生物特征(小型)文件比较