Pandas Dataframe 的序列化

nwo49xxi  于 2023-02-02  发布在  其他
关注(0)|答案(4)|浏览(289)

有没有一种快速的方法来序列化DataFrame?
我有一个可以并行运行Pandas分析的网格系统。最后,我想收集每个网格作业的所有结果(作为一个数据框),并将它们聚合成一个巨大的数据框。
如何将 Dataframe 保存为二进制格式,以便快速加载?

gv8xihay

gv8xihay1#

最简单的方法就是使用to_pickle(作为pickle),参见docs API页面中的pickle:

df.to_pickle(file_name)
  • 另一种选择是使用HDF5(构建在PyTables上),它的入门工作量稍大,但查询功能要丰富得多。*
4bbkushb

4bbkushb2#

DataFrame.to_msgpack是实验性的,并不是没有一些问题,例如,对于Unicode,但它比pickle快得多。它在大约2秒内串行化了一个具有500万行的 Dataframe ,占用了2-3 GB的内存,生成的文件约为750 Mb。加载速度稍慢,但仍比取消pickle快得多。

kmpatx3s

kmpatx3s3#

必须计时可用的io functions?二进制不是自动更快,HDF5应该是相当快,据我所知。

b1payxdu

b1payxdu4#

我为this question准备了这个答案,它被错误地标记为这个答案的重复。

  • 速度 * 的最佳方法并不是 * 可移植性 * 或 * 保真度 * 的最佳方法。Pickle快速可靠,但不具有可移植性或归档安全性。HFD具有可移植性和归档安全性,但速度较慢,只能存储具有特定格式和结构的DataFrame。
    • 摘要:**
  • 对于简单表格的共享和存档,允许对格式进行一些更改:csvexceljson,具体取决于应用程序。
  • 要实现完美的保存和恢复,但缺乏可移植性或归档安全性:pickle
  • 存档:hdf,但并不是所有的表都能以这种格式便携或无损地保存。您可能需要重新构造东西并转换一些类型。
    • 详细信息:**我们需要pandas已经支持的方法,DataFrame类中的.to_format方法和pandas模块中的read_format方法。在Pandas 1.5.2中,这些方法是csvexcelfeathergbqhdfhtmljsonorcparquetpicklesqlstataxml
  • excelcsv具有很高的可移植性,非常适合简单的表,复杂的表和数据结构无法承受往返。
  • json也是高度可移植的,但是将改变表中的数据。NaN将被转换为None,numpy数组可以转换为嵌套列表,等等。
  • 我将跳过feathergbqorcparquetsqlstata。这些是与DataTable格式不完全兼容的特定格式。它们不是很容易移植,就是不太灵活。我还将跳过html,它不能忠实地保存和恢复DataFrame的所有细节。
  • pickle是最容易用于忠实保存/恢复的。但是,它不具有可移植性,并且不具有归档安全性。预计pickle文件在将来的版本中将无法正确加载。
  • 这就剩下hdf了,这应该是一个可实现的安全和高度可移植的格式,许多科学应用程序读取或存储hdf文件,然而,python仍然需要pickle任何不能转换为ctype的dataframe内容。

相关问题