为了实现快速读/写性能(在 Python/pandas 中),推荐的 HDF5 压缩是多少?

2024-03-03

我曾多次读到,在 HDF5 中打开压缩可以带来更好的读/写性能。

我想知道什么理想的设置可以在以下位置实现良好的读/写性能:

 data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)

我已经在使用了fixed格式(即h5py)因为它比table。我有强大的处理器,不太关心磁盘空间。

我经常储存DataFrames of float64 and str键入大约的文件。 2500 行 x 9000 列。


您可以使用几种可能的压缩过滤器。 自从HDF5 版本 1.8.11 https://support.hdfgroup.org/HDF5/faq/compression.html您可以轻松注册第 3 方压缩过滤器。

关于性能:

这可能取决于您的访问模式,因为您可能希望为块定义适当的维度,以便它与您的访问模式很好地保持一致,否则您的性能将受到很大影响。例如,如果您知道您通常访问一列和所有行,您应该相应地定义块形状(1,9000). See here http://www.pytables.org/usersguide/optimization.html, here https://www.hdfgroup.org/HDF5/doc/Advanced/Chunking/ and here https://www.hdfgroup.org/training/HDFtraining/UsersGuide/Perform.fm2.html一些信息。

然而 AFAIK pandas 通常最终会将整个 HDF5 文件加载到内存中,除非您使用read_table and an iterator (see here https://stackoverflow.com/questions/15692984/pandas-large-data-hdf-tables-and-memory-usage-when-calling-a-function)或者自己做部分IO(参见here https://stackoverflow.com/questions/14262433/large-data-work-flows-using-pandas),因此定义一个好的块大小并没有真正带来多大好处。

尽管如此,您仍然可以从压缩中受益,因为将压缩数据加载到内存并使用 CPU 解压缩可能比加载未压缩数据更快。

关于你原来的问题:

我建议看一下Blosc http://www.blosc.org/。它是一个多线程元压缩器库,支持各种不同的压缩过滤器:

  • BloscLZ:内部默认压缩器,很大程度上基于 FastLZ。
  • LZ4:紧凑、非常流行且快速的压缩器。
  • LZ4HC:LZ4 的调整版本,以牺牲速度为代价产生更好的压缩比。
  • Snappy:一种在很多地方使用的流行压缩器。
  • Zlib:经典;比以前的速度稍慢,但实现了更好的压缩比。

它们具有不同的优势,最好的办法是尝试用您的数据对它们进行基准测试,看看哪种效果最好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为了实现快速读/写性能(在 Python/pandas 中),推荐的 HDF5 压缩是多少? 的相关文章

  • 在 Pandas 中按索引分组

    如何使用 groupby by 索引 1 2 3 它们的顺序相同 并获得属于每个索引范围的列分数的总和 基本上我有这个 index score 1 2 2 2 3 2 1 3 2 3 3 3 我想要的是 index score sum 1
  • 为什么 pyplot.plot() 创建一个宽度=1、高度=1 的额外矩形?

    我正在从 DataFrame 创建一个简单的条形图 Series 和 DataFrame 上的绘图方法只是 pyplot plot 的简单包装 import pandas as pd import matplotlib as mpl df
  • 如何从 pandas groupby 中的多列中获取唯一值

    从这个数据框 df 开始 df pd DataFrame c 1 1 1 2 2 2 l1 a a b c c b l2 b d d f e f c l1 l2 0 1 a b 1 1 a d 2 1 b d 3 2 c f 4 2 c e
  • Pandas 根据另一列的条件有选择地覆盖列中的值

    我有一个带有四列的 pandas 数据框 数据由字符串组成 样本 A B C D 0 2 asicdsada v cVccv u 1 4 ascccaiiidncll v cVccv ccvc u 2 9 sca V c u 3 11 lk
  • 熊猫滚动意味着更新

    考虑数据框 df pd DataFrame a None None None None 1 2 1 0 1 b 5 4 6 7 None None None None None gt gt a b 0 NaN 5 0 1 NaN 4 0 2
  • 如何从数据框的单元格中获取值?

    我构建了一个条件 从我的数据框中提取一行 d2 df df l ext l ext df item item df wn wn df wd 1 现在我想从特定列中获取一个值 val d2 col name 但结果 我得到一个包含一行和一列
  • Pandas 时间序列数据索引从字符串到浮点[重复]

    这个问题在这里已经有答案了 有人知道如何将字符串输出转换为浮点数吗 我正在尝试创建单独的数据框 Month and day of the week 基于时间戳索引 这df index strftime输出一个字符串 但我需要一个float基
  • 如何将函数应用于多个 pandas 数据框

    我有多个数据框 df1 df2 df3 dfn 它们具有相同类型的数据 但来自无法连接的不同描述符组 现在我需要手动将相同的函数应用于每个数据帧 如何将相同的函数应用于多个数据框 pipe https pandas pydata org p
  • 如果包含字符串,pandas 重命名列

    我想遍历数据框中的所有列 并重命名 或映射 列 如果它们包含某些字符串 例如 将包含 agriculture 的所有列重命名为字符串 agri 我正在考虑使用rename and str contains但不知道如何将它们结合起来以实现我想
  • python 中的最大主动回撤

    我最近问了一个关于计算最大回撤 https stackoverflow com questions 36750571 calculate max draw down with a vectorized solution in python
  • 使用 Fig.update_layout Plotly 更新 Traces 的可见性

    从这个问题继续 从下拉菜单或按钮中将 sqrt 设置为 y 轴刻度 Python Plotly https stackoverflow com questions 66226542 set sqrt as yaxis scale from
  • 如何将 Pandas Dataframe 中的字符串转换为字符列表或数组?

    我有一个名为的数据框data 其中一列包含字符串 我想从字符串中提取字符 因为我的目标是对它们进行一次性编码并使之可用于分类 包含字符串的列存储在预测因子如下 predictors pd DataFrame data columns Seq
  • 获取pandas数据框列中值的长度

    我试图获取下面提到的数据框中每个 zipCd 值的长度 当我运行下面的代码时 每条记录都得到 958 我期待得到更像 4 的东西 有人看出问题是什么吗 Code zipDfCopy zipCd str len Data print zipD
  • Pandas 将列添加到非引用数据框中

    这件事让我心潮澎湃好几个小时了 也许我遗漏了一些神秘的 陷阱 但它一定是非常违反直觉的 Trial unq 是一个两列数据帧 Trial unq2 是一个相同的副本 for 循环遍历 unique in 中的所有字符串 如果 unique
  • 无法对列数据重新排序

    我有数据框而不是序列 如果我使用len df columns 我的数据有3586列 如何重新排序数据序列 ID V1 V10 V100 V1000 V1001 V1002 V990 V991 V992 V993 V994 A 1 9 0 2
  • 使用 Pandas 数据框中的字数统计来删除仅包含一个单词的行

    我有一个包含 2 条记录的数据框 数据 id text 0001 The farmer plants grain 0002 tuna 我想统计一下里面的单词数text该数据框的列并删除只有一个单词的行 我知道如何计算单词数 count da
  • 通过 rpy 将 SPSS 文件(.sav)导入 pandas 时如何保留标签?

    我正在寻找使用 SPSS 文件 sav pandas 在没有 SPSS 程序的情况下 典型文件转换为 csv 后的样子如下 在调查前两行的含义时 我不知道 SPSS 似乎第一行包含Labels 而第二行包含VarNames 当我将文件带入
  • C++ 压缩字节数组

    大家好 我加载一组图像并生成体积数据 我将此体积数据保存在 无符号字符 体积 array 现在我想将此数组保存在文件中并检索 但在保存之前我想压缩字节数组 因为卷数据很大 这方面有什么建议吗 提前致谢 volume在你的例子中不是一个数组
  • 创建 df 以生成给定格式的 json

    我正在尝试生成一个 df 来生成下面的 json Json数据 name flare children name K1 children name Exact size 4 name synonyms size 14 name K2 chi
  • 将非方邻接矩阵导入 Networkx python

    我在下面有一些 pandas 数据框形式的数据 其中列代表离散技能 行代表离散工作 仅当工作需要该技能时才存在 1 否则为 0 skill 1 skill 2 job 1 1 0 job 2 0 0 job 3 1 1 我想使用 netwo

随机推荐