为什么 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
).
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
).