|
我们在使用pandas处理完数据之后,最终总是要把数据作为一个文件保存下来,
那么,保存数据最常用的文件是什么呢?
我想大部分人一定会选择csv或者excel。
刚接触数据分析时,我也是这么选择的,不过,今天将介绍几种不一样的存储数据的文件格式。
这些文件格式各有自己的一些优点,希望本文能让你以后的数据存储方式能有不一样的选择,从而存储的更加专业。
1. 准备数据
本次使用的数据来自A股2023年全年的日交易数据。
数据下载地址:https://databook.top/。
导入数据:- import pandas as pd
- fp = "d:/share/历史行情数据-不复权-2023.csv"
- df = pd.read_csv(fp)
- df
复制代码
总共大约120多万条数据。
准备好测试数据之后,开始测试各种文件的效果。
2. CSV
使用pandas做数据分析时,保存数据最常用的格式一定是CSV(或者excel)。
因为CSV格式易于分享,用excel或者文本编辑器都能直接打开。
但是当数据集规模比较大时,它的磁盘利用率和读写效率究竟如何呢?
首先我们把准备的数据保存为一个测试用的test.csv文件。- df = pd.read_csv(fp)
- df.to_csv("d:/share/test.csv", index=None)
复制代码 看看文件大小:- ls .\test.csv
- 目录: D:\share
- Mode LastWriteTime Length Name
- ---- ------------- ------ ----
- -a---- 2024/03/15 10:41:27 101411037 test.csv
复制代码 test.csv文件大约:\(101411037/1024/1024 \approx 96.7MB\)
读取效率:- %%timeit
- df = pd.read_csv("d:/share/test.csv")
复制代码- 1.73 s ± 54.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
复制代码 写入的效率:- %%timeit
- df.to_csv("d:/share/test.csv", index=None)
复制代码- 13.2 s ± 402 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
复制代码 3. Pickle
Pickle格式是一种用于序列化和反序列化Python对象结构的二进制格式。
它的主要特点是能够将程序中运行的对象信息保存到文件中。
下面,我们先把准备的数据保存为一个测试用的test.pkl文件。- # pickle file
- df = pd.read_csv(fp)
- df.to_pickle("d:/share/test.pkl")
复制代码 文件大小:- ls .\test.pkl
- 目录: D:\share
- Mode LastWriteTime Length Name
- ---- ------------- ------ ----
- -a---- 2024/03/15 10:49:09 116904470 test.pkl
复制代码 test.pkl文件大约:\(116904470/1024/1024 \approx 111.5MB\)
读取效率:- %%timeit
- df = pd.read_pickle("d:/share/test.pkl")
复制代码- 136 ms ± 5.09 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
复制代码 写入效率:- %%timeit
- df.to_pickle("d:/share/test.pkl")
复制代码- 182 ms ± 7.42 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
复制代码 4. Parquet
Parquet格式是一种列式存储格式,被广泛应用于大数据处理领域。
它采用了压缩和编码技术,能够有效地存储和压缩数据,同时保持数据的结构和模式。
下面,我们先把准备的数据保存为一个测试用的test.parquet文件。- # parquet file
- df = pd.read_csv(fp)
- df.to_parquet("d:/share/test.parquet")
复制代码 文件大小:- ls .\test.parquet
- 目录: D:\share
- Mode LastWriteTime Length Name
- ---- ------------- ------ ----
- -a---- 2024/03/15 10:52:08 32964728 test.parquet
复制代码 test.parquet文件大约:\(32964728/1024/1024 \approx 31.4MB\)
读取效率:- %%timeit
- df = pd.read_parquet("d:/share/test.parquet")
复制代码- 200 ms ± 8.54 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
复制代码 写入效率:- %%timeit
- df.to_parquet("d:/share/test.parquet")
复制代码- 1.23 s ± 62.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
复制代码 5. Feather
Feather格式是一种高速、轻量且易于使用的二进制文件格式,专门用于存储数据帧。
Feather的主要目标是提供高性能的读写操作。
下面,我们先把准备的数据保存为一个测试用的test.feather文件。- # feather file
- df = pd.read_csv(fp)
- df.to_feather("d:/share/test.feather")
复制代码 文件大小:- ls .\test.feather
- 目录: D:\share
- Mode LastWriteTime Length Name
- ---- ------------- ------ ----
- -a---- 2024/03/15 11:17:15 57347098 test.feather
复制代码 test.feather文件大约:\(57347098/1024/1024 \approx 54.7MB\)
读取效率:- %%timeit
- df = pd.read_feather("d:/share/test.feather")
复制代码- 130 ms ± 5.29 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
复制代码 写入效率:- %%timeit
- df.to_feather("d:/share/test.feather")
复制代码- 277 ms ± 14.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
复制代码 6. 总结
pandas能够保存的文件格式有很多,比如还有XML,JSON,HTML等等,
上面列出的4种是我认为比较典型,且在数据分析领域用的比较多的格式。
4种格式的比较总结如下:
磁盘占用读取效率写入效率csv96.7 MB1.73 s ± 54.7 ms13.2 s ± 402 mspickle111.5 MB136 ms ± 5.09 ms182 ms ± 7.42 msparquet31.4 MB200 ms ± 8.54 ms1.23 s ± 62.4 msfeather54.7 MB130 ms ± 5.29 ms277 ms ± 14.8 ms综合来看,当我们的数据量不大的时候,用CSV格式比较好,分享方便,可以用多种编辑器直接打开查看。
当数据规模变大了之后,如果数据需要长期存储,而且不需要经常的更新写入,那么用parquet格式(它的磁盘占用最低,读取性能好,写入性能略逊);
如果只要短期存储的话,用fetdher格式更好(磁盘占用不算高,读写性能都不错)。
至于pickle格式,它的读写性能也不错,但它的最大优势是可以保存python对象的状态,只用来保存数据的话,这个优势难以体现。
而且它的磁盘占用比较大,单纯保存数据的话,不建议使用这种格式。
来源:https://www.cnblogs.com/wang_yb/p/18075201
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|