Pandas DataFrame 存储格式性能对比!

本文详细介绍了如何使用Pandas创建包含不同类型数据的测试DataFrame,并测试了CSV、Pickle、Parquet、ORC、Feather和HDF5等格式的写入、读取速度以及文件大小,分析了各种格式的优缺点。
摘要由CSDN通过智能技术生成

创建测试Dataframe

首先创建一个包含不同类型数据的测试Pandas Dataframe。



 import pandas as pd  
 import random  
 import string  
 import numpy as np  
   
 # Config DF  
 df\_length= 10\*\*6  
 start\_date= '2023-01-01'  
 all\_string= list(string.ascii\_letters + string.digits)  
 string\_length= 10\*\*1  
 min\_number= 0  
 max\_number= 10\*\*3  
   
 # Create Columns  
 date\_col= pd.date\_range(start= start\_date, periods= df\_length, freq= 'H')  
 str\_col= \[''.join(np.random.choice(all\_string, string\_length)) for i in range(df\_length)\]  
 float\_col= np.random.rand(df\_length)  
 int\_col= np.random.randint(min\_number,max\_number, size = df\_length)  
   
 # Create DataFrame  
 df= pd.DataFrame({'date\_col' : date\_col,  
                  'str\_col' : str\_col,  
                  'float\_col' : float\_col,  
                  'int\_col' : int\_col})  
 df.info()  
 df.head()


以不同的格式存储

接下来创建测试函数,以不同的格式进行读写。



 import time  
 import os  
   
 def check\_read\_write\_size(df, file\_name, compression= None) :  
    format= file\_name.split('.')\[\-1\]  
    # Write  
    begin= time.time()  
    if file\_name.endswith('.csv') : df.to\_csv(file\_name, index= False, compression= compression)  
    elif file\_name.endswith('.parquet') : df.to\_parquet(file\_name, compression= compression)  
    elif file\_name.endswith('.pickle') : df.to\_pickle(file\_name, compression= compression)  
    elif file\_name.endswith('.orc') : df.to\_orc(file\_name)  
    elif file\_name.endswith('.feather') : df.to\_feather(file\_name)  
    elif file\_name.endswith('.h5') : df.to\_hdf(file\_name, key= 'df')  
    write\_time= time.time() - begin  
    # Read  
    begin= time.time()  
    if file\_name.endswith('.csv') : pd.read\_csv(file\_name, compression= compression)  
    elif file\_name.endswith('.parquet') : pd.read\_parquet(file\_name)  
    elif file\_name.endswith('.pickle') : pd.read\_pickle(file\_name, compression= compression)  
    elif file\_name.endswith('.orc') : pd.read\_orc(file\_name)  
    elif file\_name.endswith('.h5') : pd.read\_hdf(file\_name)  
    read\_time= time.time() - begin  
    # File Size  
    file\_size\_mb = os.path.getsize(file\_name) / (1024 \* 1024)  
    return \[format, compression, read\_time, write\_time, file\_size\_mb\]


然后运行该函数并将结果存储在另一个Pandas Dataframe中。



 test\_case= \[  
            \['df.csv','infer'\],  
            \['df.csv','gzip'\],  
            \['df.pickle','infer'\],  
            \['df.pickle','gzip'\],  
            \['df.parquet','snappy'\],  
            \['df.parquet','gzip'\],  
            \['df.orc','default'\],  
            \['df.feather','default'\],  
            \['df.h5','default'\],  
            \]  
   
 result= \[\]  
 for i in test\_case :  
    result.append(check\_read\_write\_size(df, i\[0\], compression= i\[1\]))  
   
 result\_df= pd.DataFrame(result, columns= \['format','compression','read\_time','write\_time','file\_size'\])  
 result\_df


测试结果

下面的图表和表格是测试的结果。

我们对测试的结果做一个简单的分析:

CSV

  • 未压缩文件的大小最大

  • 压缩后的尺寸很小,但不是最小的

  • CSV的读取速度和写入速度是最慢的

Pickle

  • 表现得很平均

  • 但压缩写入速度是最慢的

Feather(再见 CSV,速度提升 150 倍!

  • 最快的读写速度,文件的大小也是中等,非常的平均

ORC

  • 所有格式中最小的

  • 读写速度非常快,几乎是最快的

Parquet

  • 总的来说,快速并且非常小,但是并不是最快也不是最小的

以上就是“Pandas DataFrame 存储格式性能对比!”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值