Pandas DataFrame 数据存储格式比较

news2024/10/7 16:23:43

Pandas 支持多种存储格式,在本文中将对不同类型存储格式下的Pandas Dataframe的读取速度、写入速度和大小的进行测试对比。

创建测试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

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

ORC

  • 所有格式中最小的
  • 读写速度非常快,几乎是最快的

Parquet

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

总结

从结果来看,我们应该使用ORC或Feather,而不再使用CSV ?是吗?

“这取决于你的系统。”

如果你正在做一些单独的项目,那么使用最快或最小的格式肯定是有意义的。

但大多数时候,我们必须与他人合作。所以,除了速度和大小,还有更多的因素。

未压缩的CSV可能很慢,而且最大,但是当需要将数据发送到另一个系统时,它非常容易。

ORC作为传统的大数据处理格式(来自Hive)对于速度的和大小的优化是做的最好的,Parquet比ORC更大、更慢,但是它却是在速度和大小中取得了最佳的平衡,并且支持他的生态也多,所以在需要处理大文件的时候可以优先选择Parquet。

https://avoid.overfit.cn/post/387acc48c7dd42a49f7bec90cc6d09ae

作者:Chanon Krittapholchai

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/973754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解TCP/IP的三次握手和四次挥手

文章目录 前言一、TCP/IP协议的三次握手1.1 三次握手流程 二、TCP/IP的四次挥手2.1 四次挥手流程 三、主要字段3.1、标志位(Flags)3.2、序号(sequence number)3.3、确认号(acknowledgement number) 四、状态…

如何让图片动起来?拿捏这个方法轻松做到

现在,越来越多的人开始使用手机来制作动态图片,因为手机上的应用程序使得这个过程变得简单而有趣。下面我们来探讨一些如何让图片动起来的方法以及在手机上制作时需要注意的事项。 制作动态图片的方法 首先我们先准备好需要制作动态特效的图片&#xff…

Wireshark抓包常用指令

1.常用过滤规则 指定源地址: ip.src 10.0.1.123ip.src 10.0.1.123 && udphttp数据链路层:筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src 04:f9:38:ad:13:26筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src 04:f9:38:ad:13:26网…

Python 之 match 表达式

Python 从 3.10 版本开始增加了 match 语句,和其他语言常见的 switch 语句极其相似,但功能更加强大。 本文通过实例,了解下其用法。 基本的 match 语句 def http_code(status): match status: case 400 | 404 | 418: …

STL ---- vector 使用

单纯的使用vector不和algorithm连用. vector自带的方法: push_back(num) pop_back() push_back 添加元素, pop_back删除元素.添加和删除都是在末尾添加和删除的. void assign(const_iterator first,const_iterator last); // 相当于拷贝函数 void assign(size_type n,const…

长胜证券:创业板上市容易吗?

创业板是我国股市的一个板块,特点是适合一些新式企业在股市进行融资。与A股比较,创业板上市门槛相对较低,整个上市过程相对简单和方便,似乎对于草创企业来说十分有利。但是,实际上,创业板上市虽然相对简单&…

陶氏公司将出席2023第二届中国汽车碳中和峰会

2023第二届中国汽车碳中和峰会将于10月19日-20日在上海举办。 本次峰会将为行业领导者、政策制定者和专家提供一个平台,讨论汽车行业减少碳排放的策略。专家们将从政策、供应链、ESG、替代能源解决方案、汽车材料创新、法律等不同领域分享碳中和与可持续策略。 通…

HDFS HA 高可用集群搭建详细图文教程

目录 一、高可用(HA)的背景知识 1.1 单点故障 1.2 如何解决单点故障 1.2.1 主备集群 1.2.2 Active、Standby 1.2.3 高可用 1.2.4 集群可用性评判标准(x 个 9) 1.3 HA 系统设计核心问题 1.3.1 脑裂问题 1.3.2 数据状…

项目(智慧教室)第三部分,人机交互在stm32上的实现

一。使用软件 1.stm32cubemx中针对汉字提供的软件 2.对数据进行处理 2.上面点击ok--》这里选择确定 3.这里选择保存即可由字符库,但是需要占用内存太大,需35M,但是stm32只有几百k,所以需要自己删减。 生成中文字符(用…

UML基础

统一建模语言(UML是 Unified Modeling Language的缩写, 是用来对软件系统进行可视化建模的一种语言。UML为面向对象开发系统的产品 进行说明、可视化、和编制文档的一种标准语言。 共有9种图 UML中的图其实不止九种 (相同的图还可能会有不同的名称), 这里的九种图是…

写字楼远程预付费抄表系统

写字楼远程预付费抄表系统是一种现代化的智能抄表解决方案,具有许多优点,例如:提高抄表效率,降低人力成本,减少误差,防止偷漏电等问题。下面就由小编来为大家来讲解下写字楼远程预付费抄表系统吧&#xff0…

2023年动力电池回收行业研究报告

第一章 行业概况 1.1 定义 动力电池,通常指用于驱动电动车辆(包括电动汽车、电动自行车、电动滑板车等)的电池。这类电池需要具备高能量密度(以便在较小的空间和重量下提供更多的能量)、高功率密度(以便在…

vue3中TCplayer应用

环境win10:vitevue3elementUI 1 安装 npm install tcplayer.js2 使用 <template><div><video id"player-container-id" width"414" height"270" preload"auto" playsinline webkit-playsinline></video>&l…

01-数据类型和转换

数据 定义&#xff1a;对现实生活中事物的抽象描述&#xff0c;在程序世界中一切都采用数据进行描述&#xff0c;程序的执行实际上就是对数据的操作。数据是存储在内存和硬盘中的。 数据类型 基本数据类型&#xff1a; 数字&#xff08;number)、字符串&#xff08;string&…

基于AI识别与视频监控技术的土地建设履约全周期监管方案

一、项目背景 当前&#xff0c;各级政府正在积极大力推进土地节约集约利用工作&#xff0c;不断推动工业用地提质增效。但是&#xff0c;持续推进土地节约集约利用也面临着一些新情况、新问题&#xff0c;比如&#xff0c;在工业用地批后监管机制还不够健全&#xff0c;存在项…

无涯教程-JavaScript - DVARP函数

描述 DVARP函数通过使用列表或数据库中符合您指定条件的记录的字段(列)中的数字,基于整个总体计算总体的方差。 语法 DVARP (database, field, criteria)争论 Argument描述Required/Optionaldatabase 组成列表或数据库的单元格范围。 数据库是相关数据的列表,其中相关信息的…

2023-09-04 Linux 让shell编译脚本里面设置的环境变量改变kernel里面驱动文件的宏定义值方法,我这里用来做修改固件版本

一、原生的读取版本接口是/proc/version&#xff0c;我这里需要提供获取固件版本号的api给app&#xff0c;因为版本号会经常需要修改&#xff0c;如果每次都到kernel下修改比较麻烦&#xff0c;我这里是想在编译脚本里面对版本号进行修改&#xff0c;这样方便一点。 二、主要修…

实验三十二、OCL电路的研究

一、题目 仿真电路如图1所示。利用 Multisim 研究下列问题&#xff1a; &#xff08;1&#xff09;负载 R 6 R_6 R6​ 上能获得的最大输出功率&#xff1b; &#xff08;2&#xff09;电容 C 1 C_1 C1​、 C 2 C_2 C2​ 的作用&#xff1b; &#xff08;3&#xff09;当输入…

基于ebpf的性能工具-bpftrace实战(内存泄漏)

在之前的篇章中&#xff0c;我们已经详细阐述了bpftrace的操作原理&#xff0c;以及其脚本语法的特点。在本文中&#xff0c;我们将通过实际案例展示bpftrace这一强大工具的实际应用&#xff0c;以便更加深入地理解其在解决问题中的价值。 基于ubuntu22.04-深入浅出 eBPF 基于e…

Python测试框架 Pytest —— mock使用(pytest-mock)

pytest-mock 安装&#xff1a;pip install pytest-mock 这里的mock和unittest的mock基本上都是一样的&#xff0c;唯一的区别在于pytest.mock需要导入mock对象的详细路径。 # weateher_r.py class Mock_weather():def weather(self):天气接口passdef weather_result(self):模…