创建多行熊猫数据框的更快方法

时间:2021-03-02 18:26:17

标签: python pandas dataframe hdf5

我正在读取包含大量数据的 hdf5 文件。我想将它存储在一个数据框中(它将包含大约 1.3e9 行)。目前我正在使用以下程序:

df = pd.DataFrame()
for key in ['Column1', 'Column2', 'Column3']:
    df[key] = np.array(h5assembly.get(key))

我已经计时了,大约需要 110 秒

如果我只是将值分配给 numpy 数组,如下所示:

v1 = np.array(h5assembly.get('Column1'))
v2 = np.array(h5assembly.get('Column2'))
v3 = np.array(h5assembly.get('Column3'))

大约需要 22 秒。

我做错了吗?预计数据帧的创建速度会慢很多吗?有什么办法可以加速这个过程吗?

2 个答案:

答案 0 :(得分:0)

是的,预计 DataFrame 将比 Numpy 数组花费更长的时间。这是由于各种原因,我不会一一列举。部分原因是 Numpy 可能会使用和释放内存。 Numpy 操作是用 C 实现的,这是一种具有性能优势的编译语言。

这里可以看到 Pandas 和 Numpy 性能之间的有趣比较: https://penandpants.com/2014/09/05/performance-of-pandas-series-vs-numpy-arrays/

旨在使用并行化加速 Pandas 的包是 Molin:https://www.kdnuggets.com/2019/11/speed-up-pandas-4x.html

这里还有一个名为“PyPolars”的包,它旨在以与 Pandas 非常相似的方式工作,并且由于 Rust 的实现而具有更高的性能: https://www.analyticsvidhya.com/blog/2021/02/is-pypolars-the-new-alternative-to-pandas/

答案 1 :(得分:0)

您可以使用 pandas.read_hdf 将 hdf 文件直接读入数据帧。

df = pd.read_hdf('./store.h5')