有没有一种快速的方法来序列化DataFrame?我有一个可以并行运行Pandas分析的网格系统。最后,我想收集每个网格作业的所有结果(作为一个数据框),并将它们聚合成一个巨大的数据框。如何将 Dataframe 保存为二进制格式,以便快速加载?
gv8xihay1#
最简单的方法就是使用to_pickle(作为pickle),参见docs API页面中的pickle:
df.to_pickle(file_name)
4bbkushb2#
DataFrame.to_msgpack是实验性的,并不是没有一些问题,例如,对于Unicode,但它比pickle快得多。它在大约2秒内串行化了一个具有500万行的 Dataframe ,占用了2-3 GB的内存,生成的文件约为750 Mb。加载速度稍慢,但仍比取消pickle快得多。
kmpatx3s3#
必须计时可用的io functions?二进制不是自动更快,HDF5应该是相当快,据我所知。
b1payxdu4#
我为this question准备了这个答案,它被错误地标记为这个答案的重复。
csv
excel
json
pickle
hdf
pandas
DataFrame
.to_format
read_format
feather
gbq
html
orc
parquet
sql
stata
xml
NaN
None
4条答案
按热度按时间gv8xihay1#
最简单的方法就是使用to_pickle(作为pickle),参见docs API页面中的pickle:
4bbkushb2#
DataFrame.to_msgpack是实验性的,并不是没有一些问题,例如,对于Unicode,但它比pickle快得多。它在大约2秒内串行化了一个具有500万行的 Dataframe ,占用了2-3 GB的内存,生成的文件约为750 Mb。加载速度稍慢,但仍比取消pickle快得多。
kmpatx3s3#
必须计时可用的io functions?二进制不是自动更快,HDF5应该是相当快,据我所知。
b1payxdu4#
我为this question准备了这个答案,它被错误地标记为这个答案的重复。
csv
、excel
或json
,具体取决于应用程序。pickle
hdf
,但并不是所有的表都能以这种格式便携或无损地保存。您可能需要重新构造东西并转换一些类型。pandas
已经支持的方法,DataFrame
类中的.to_format
方法和pandas
模块中的read_format
方法。在Pandas 1.5.2中,这些方法是csv
、excel
、feather
、gbq
、hdf
、html
、json
、orc
、parquet
、pickle
、sql
、stata
、xml
。excel
和csv
具有很高的可移植性,非常适合简单的表,复杂的表和数据结构无法承受往返。json
也是高度可移植的,但是将改变表中的数据。NaN
将被转换为None
,numpy数组可以转换为嵌套列表,等等。feather
、gbq
、orc
、parquet
、sql
和stata
。这些是与DataTable格式不完全兼容的特定格式。它们不是很容易移植,就是不太灵活。我还将跳过html
,它不能忠实地保存和恢复DataFrame的所有细节。pickle
是最容易用于忠实保存/恢复的。但是,它不具有可移植性,并且不具有归档安全性。预计pickle文件在将来的版本中将无法正确加载。hdf
了,这应该是一个可实现的安全和高度可移植的格式,许多科学应用程序读取或存储hdf
文件,然而,python仍然需要pickle任何不能转换为ctype的dataframe内容。