【问题标题】:Faster way to create pandas dataframe with many rows使用多行创建熊猫数据框的更快方法
【发布时间】:2021-06-01 07:57:35
【问题描述】:

我正在阅读具有大量数据的 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 秒。

我做错了吗?是否预计数据框的创建速度会慢得多?有什么方法可以加速这个过程?

【问题讨论】:

    标签: python pandas dataframe hdf5


    【解决方案1】:

    是的,预计 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/

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我得到答案 ValueError: No dataset in HDF5 file.
      猜你喜欢
      • 1970-01-01
      • 2021-06-06
      • 2022-01-11
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 2021-06-06
      • 2013-10-23
      相关资源
      最近更新 更多