【问题标题】:From hdf5 files to csv files with Python使用 Python 从 hdf5 文件到 csv 文件
【发布时间】:2021-05-24 04:00:28
【问题描述】:

我必须处理 hdf5 文件。它们中的每一个都包含可以加载到由 100 列和近 5E5 行组成的 pandas DataFrame 的数据。每个 hdf5 文件重约 130MB。

所以我想从 hdf5 文件中获取数据,然后进行一些处理,最后将新数据保存在 csv 文件中。就我而言,过程的性能非常重要,因为我将不得不重复它。

到目前为止,我一直专注于 Pandas 和 Dask 来完成工作。 Dask 有利于并行化,我将通过更强大的 PC 和更多的 CPU 获得良好的处理时间。

但是你们中的一些人已经遇到过这个问题并找到了最佳优化?

【问题讨论】:

  • 欢迎来到 StackOverflow!如果没有更多细节,很难提供具体的指导。您的问题可能会被否决或关闭,因为它非常开放。一般来说,我会说 dask 和 pandas 是很好的库,而且将大量数据从 HDF5 转换为 CSV 涉及从用于大量数据的压缩二进制存储格式转变为易于阅读的低效存储格式编码错误和其他问题。如果你必须这样做,那么你可能是正确的开始。但我唯一的建议是尽量不要这样做 :) 祝你好运!
  • @Michael Delgado 对 HDF5 与 CSV 的文件大小和性能提出了很好的观点。另一个考虑因素:您现在必须跟踪 HDF5 文件和导出的 CSV 文件。只有在必要时才应该这样做。否则,您最好编写代码以原生格式读取 HDF5 数据。
  • 感谢@Michael Delgado 和@kcw78 的cmets。你说的对。如果有人想知道使用 csv 文件而不是 hdf5 是否会很有趣,那么您的 cmets 会为不选择此选项提供很好的论据。如果不必这样做,我不会将 hdf5 转换为 csv。

标签: python pandas csv dask hdf5


【解决方案1】:

正如其他人在 cmets 中提到的那样,除非您必须将其移动到 CSV,否则我建议将其保留在 HDF5 中。但是,如果您必须执行转换,下面将说明如何执行此操作。

听起来您有一个将 HDF5 文件加载到熊猫数据框中的功能。我建议使用dask's delayed API 创建延迟的 pandas 数据帧列表,然后将它们转换为 dask 数据帧。下面的片段是从链接页面复制的,并添加了一行以保存到 CSV。

import dask.dataframe as dd
from dask.delayed import delayed

from my_custom_library import load

filenames = ...
dfs = [delayed(load)(fn) for fn in filenames]

df = dd.from_delayed(dfs)
df.to_csv(filename, **kwargs)

有关保存为 CSV 的选项的信息,请参阅 dd.to_csv() 文档。

【讨论】:

  • 谢谢@natemcintosh。您使用延迟 Dask 的建议似乎是相关的。我可以将我的 hdf5 文件设置为一个集合,可以使用 dd.from_delayed 将其加载到单个数据帧 dask 中。然后在这个单个数据帧上执行 df.apply 会更有效。因此,与单独处理 hdf5 文件相比,我获得了 8% 的时间处理增益。不幸的是,我的处理 df.apply 返回一个 pandas.Series 并且我很难生成可以使用 dd.to_delayed 方法完成的 csv 文件。无论如何,根据您和 Michael Delgado 的说法,pandas 和 dask 选项很好。我会深入研究它。
猜你喜欢
  • 2011-12-30
  • 2020-09-16
  • 2014-06-13
  • 2019-07-04
  • 2018-02-22
  • 2016-06-21
  • 1970-01-01
  • 2016-12-13
  • 2015-11-28
相关资源
最近更新 更多