【发布时间】:2017-06-20 16:19:48
【问题描述】:
我有一个 2Gb 的数据帧,一次写入,多次读取 df。
我想在 pandas 中使用 df,因此我使用了固定格式的 df.read_hdf 和 df.to_hdf,在阅读和写作方面都很好。
但是,随着添加的列越来越多,df 也在增长,所以我想改用表格格式,这样我可以在读取数据时选择我需要的列。我认为这会给我带来速度优势,但从测试来看似乎并非如此。
这个例子:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(10000000,9),columns=list('ABCDEFGHI'))
%time df.to_hdf("temp.h5", "temp", format ="fixed", mode="w")
%time df.to_hdf("temp2.h5", "temp2", format="table", mode="w")
显示固定格式稍快(在我的机器上为 6.8 秒对 5.9 秒)。
然后读取数据(稍作休息以确保文件已完全保存):
%time x = pd.read_hdf("temp.h5", "temp")
%time y = pd.read_hdf("temp2.h5", "temp2")
%time z = pd.read_hdf("temp2.h5", "temp2", columns=list("ABC"))
产量:
Wall time: 420 ms (fixed)
Wall time: 557 ms (format)
Wall time: 671 ms (format, specified columns)
我知道固定格式读取数据的速度更快,但为什么 具有指定列的 df 比读取完整数据帧慢?与固定格式相比,使用表格格式(有或没有指定列)有什么好处?
当 df 变得更大时,是否有内存优势?
【问题讨论】: