【问题标题】:What is the difference between save a pandas dataframe to pickle and to csv?将 pandas 数据框保存到 pickle 和 csv 有什么区别?
【发布时间】:2018-07-24 01:02:52
【问题描述】:

我正在学习 python 熊猫。 我看到一个教程,其中显示了两种保存熊猫数据框的方法。

  1. pd.to_csv('sub.csv') 并打开pd.read_csv('sub.csv')

  2. pd.to_pickle('sub.pkl') 并打开pd.read_pickle('sub.pkl')

教程说to_pickle 是将数据帧保存到磁盘。我对此感到困惑。因为当我使用to_csv 时,我确实看到文件夹中出现了一个 csv 文件,我假设它也保存到磁盘吧?

一般来说,为什么我们要使用to_pickle 保存数据帧,而不是将其保存为 csv 或 txt 或其他格式?

【问题讨论】:

  • Matthew Rocklin 做了一个有趣的速度分析here

标签: python pandas csv pickle


【解决方案1】:

csv

  • ✅人类可读
  • ✅跨平台
  • ⛔慢
  • ⛔更多磁盘空间
  • ⛔在某些情况下不保留类型

泡菜

  • ✅快速保存/加载
  • ✅更少的磁盘空间
  • ⛔非人类可读
  • ⛔仅限python

还可以看看 parquet 格式(to_parquetread_parquet

  • ✅快速保存/加载
  • ✅比 pickle 更少的磁盘空间
  • ✅很多平台都支持
  • ⛔非人类可读

【讨论】:

  • 另外看看 feather 格式 (to_feather, read_feather) 根据TDS review 它“显示高 I/O 速度,不需要磁盘上的内存太多,加载回 RAM 时不需要任何解包。”
  • 感谢这个答案非常简洁明了。对于详细的细分,我发现 this post 进行了深入细分,包括 to_featherto_parquet
【解决方案2】:

Pickle 是一种存储 Pandas 数据帧的序列化方式。基本上,您正在将数据帧的确切表示写到磁盘上。这意味着列的类型和索引是相同的。如果您只是将文件保存为csv,您只是将其存储为逗号分隔的列表。根据您的数据集,当您重新加载它时,某些信息会丢失。

您可以阅读有关 python 中的 pickle 库的更多信息,here

【讨论】:

  • 所以你的意思是, to_pickle 在保存熊猫数据帧时应该更可取,即它保留原始数据帧? to_pickle 有什么优点吗?例如,在加载速度方面?
  • @KevinKim,您可能需要查看this comparison
  • 保存为 CSV 的主要优点是具有可以使用多种软件/语言打开的标准化格式
  • @MaxU 谢谢!因此,如果我的原始数据集是一个大型 csv 文件,我想最好先将其加载到 pandas 中,然后使用 to_pickle 存储它。因此,下次当我需要再次加载此数据帧时,我可以使用 read_pickle 加载它必须更快,对吗?
  • @Alessandro 是的,这是有道理的,我同意你的看法
猜你喜欢
  • 1970-01-01
  • 2014-03-21
  • 2013-10-12
  • 2014-09-28
  • 2021-05-01
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
相关资源
最近更新 更多