在使用Python进行数据分析时,Jupyter Notebook是一个非常强力的工具,在数据集不是很大的情况下,我们可以使用pandas轻松对txt或csv等纯文本格式数据进行读写。
然而当数据集的维度或者体积很大时,将数据保存并加载回内存的过程就会变慢,并且每次启动Jupyter Notebook时都需要等待一段时间直到数据重新加载, 这样csv格式或任何其他纯文本格式数据都失去了吸引力。
本文将对pandas支持的多种格式数据在处理数据的不同方面进行比较,包含I/O速度、内存消耗、磁盘占用空间等指标,试图找出如何为我们的数据找到一个合适的格式的办法!
格式说明
现在对本文进行对比的几种数据格式进行说明。
- CSV:最常用的数据格式
- Pickle:用于序列化和反序列化Python对象结构
- MessagePack:类似于json,但是更小更块
- HDF5:一种常见的跨平台数据储存文件
- Feather:一个快速、轻量级的存储框架
- Parquet:Apache Hadoop的列式存储格式
指标说明
为了找到格式来存储数据,本文选择以下指标进行对比。
- size_mb:带有序列化数据帧的文件的大小
- save_time:将数据帧保存到磁盘所需的时间
- load_time:将先前转储的数据帧加载到内存所需的时间
- save_ram_delta_mb:在数据帧保存过程中最大的内存消耗增长
- load_ram_delta_mb:数据帧加载过程中最大的内存消耗增长