pandas常用数据格式IO性能对比
前言
本文对pandas支持的一些数据格式进行IO(读写)的性能测试,大数据时代以数据为基础,经常会遇到操作大量数据的情景,数据的IO性能尤为重要,本文对常见的数据格式csv、feather、hdf5、jay、parquet、pickle性能进行对比。
csv
CSV(Comma-Separated Values)是一种用于存储表格数据的简单文件格式。在 CSV 文件中,每一行通常代表一条记录,字段(列)由逗号分隔。尽管可以使用其他分隔符(如制表符、分号等),逗号是最常见的分隔符。
import time
import pandas as pdtemplates_path = r'./data.hdf5'
df = pd.read_hdf(templates_path, 'table')t0 = time.time()
df.to_csv("data.csv")
print('csv写时间 ', time.time()-t0)
t1 = time.time()
df2 = pd.read_csv("data.csv")
print('csv读时间 ', time.time()-t1)
测试632MB的hdf5运行结果:
csv写时间 9.340209722518921
csv读时间 5.414996147155762
feather
Feather 是一种高效的列式存储格式,专门用于快速读写数据框(DataFrame)。它是由 Apache Arrow 项目开发的,旨在提高数据处理的速度和效率,特别是在大型数据集的情况下。
import time
import pandas as pdtemplates_path = r'./data.hdf5'
df = pd.read_hdf(templates_path, 'table')t0 = time.time()
df.to_feather("data.feather")
print('feather写时间 ', time.time()-t0)
t1 = time.time()
df2 = pd.read_feather("data.feather")
print('feather读时间 ', time.time()-t1)
测试632MB的hdf5运行结果:
feather写时间 1.2748804092407227
feather读时间 5.084072828292847
hdf5
HDF5(Hierarchical Data Format version 5)是一种用于存储和管理大型、复杂的数据集合的文件格式。
import time
import pandas as pdtemplates_path = r'./data.hdf5'
df = pd.read_hdf(templates_path, 'table')t0 = time.time()
df.to_hdf("data.hdf5", 'table')
print('hdf写时间 ', time.time()-t0)
t1 = time.time()
df2 = pd.read_hdf("data.hdf5", 'table')
print('hdf读时间 ', time.time()-t1)
测试632MB的hdf5运行结果:
hdf写时间 4.227152109146118
hdf读时间 1.985311508178711
jay
Jay 格式(通常称为 Jay Data)是一种具有可扩展性的数据交换格式,主要用于存储和传输数据。
import time
import pandas as pd
import datatable as dt
templates_path = r'./data.hdf5'
df = pd.read_hdf(templates_path, 'table')t0 = time.time()
dt.Frame(df).to_jay("data.jay")
print('jay写时间 ', time.time()-t0)
t1 = time.time()
data_jay = dt.fread("data.jay")
print('jay读时间 ', time.time()-t1)
测试632MB的hdf5运行结果:
jay写时间 1.4829316139221191
jay读时间 0.0009965896606445312
parquet
Parquet 是一种列式存储文件格式,主要用于数据处理和分析场景。它是 Apache Hadoop 生态系统中的一个重要组成部分,设计用来支持高效的数据存储和检索。
import time
import pandas as pdtemplates_path = r'./data.hdf5'
df = pd.read_hdf(templates_path, 'table')t0 = time.time()
df.to_parquet("data.parquet")
print('parquet写时间 ', time.time()-t0)
t1 = time.time()
df2 = pd.read_parquet("data.parquet")
print('parquet读时间 ', time.time()-t1)
测试632MB的hdf5运行结果:
parquet写时间 1.8439412117004395
parquet读时间 5.116466522216797
pickle
pickle 是 Python 的标准库之一,用于序列化(将 Python 对象转换为字节流)和反序列化(将字节流转换回 Python 对象)。
import time
import pandas as pdtemplates_path = r'./data.hdf5'
df = pd.read_hdf(templates_path, 'table')t0 = time.time()
df.to_pickle("data.pickle")
print('pickle写时间 ', time.time()-t0)
t1 = time.time()
df2 = pd.read_pickle("data.pickle")
print('pickle读时间 ', time.time()-t1)
测试632MB的hdf5运行结果:
pickle写时间 3.7283213138580322
pickle读时间 1.2415409088134766
测试结果汇总
格式 | csv | feather | hdf5 | jay | parquet | pickle |
---|---|---|---|---|---|---|
632M写 | 9.34 | 1.27 | 4.22 | 1.48 | 1.84 | 3.72 |
632M读 | 5.41 | 5.08 | 1.98 | 0.0009 | 5.11 | 1.24 |
3.6G写 | 40.58 | 7.45 | * | 10.05 | 9.22 | 4.02 |
3.6G读 | 34.43 | 4.43 | * | 0.0019 (5.44**) | 4.82 | 3.33 |
3.6Ghdf5占用空间 | 3.65G | 0.97G | 3.6G | 3.75G | 1.01G | 3.05G |
- *数据中包含Long格式数据,无法保存,未能完成测试
- **数据需要经过处理才能达到原始数据格式,加上处理耗时
总结
本测试基于python语言,对于其他语言可能不适用。
- 对储存空间要求较高,推荐使用 feather
- 对读写速度要求较高,推荐使用 pickle
相关文章:
pandas常用数据格式IO性能对比
前言 本文对pandas支持的一些数据格式进行IO(读写)的性能测试,大数据时代以数据为基础,经常会遇到操作大量数据的情景,数据的IO性能尤为重要,本文对常见的数据格式csv、feather、hdf5、jay、parquet、pick…...

【D3.js in Action 3 精译_031】3.5.2 DIY实战:在 Observable 平台实现带数据标签的 D3 条形图并改造单元测试模块
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…...
华为OD机试真题-字符串分割
题目描述: 给定非空字符串s,将该字符串分割成一些子串,使每个子串的ASCII码值的和均为水仙花数。 1、若分割不成功,则返回0。 2、若分割成功且分割结果不唯一,则返回-1。 3、若分割成功且分割结果唯一,则返…...
编程技巧:提高代码健壮性与可维护性的关键方法(以 Shell 为例)
在脚本编写和自动化工作中,良好的编程技巧对于确保代码的健壮性和可维护性至关重要。以下是一些关键的编程技巧,包括模块化设计、单元测试、版本控制、处理边界条件、错误处理、中间值保存和创建 Flag。本文将通过 Shell 脚本示例来阐述这些技巧的应用。 1. 模块化设计 **定…...
【无标题】ReadableStream is not defined
升级 node 版本到 18 及以上即可解决...

【JVM】高级篇
1 GraalVM 1.1 什么是GraalVM GraalVM是Oracle官方推出的一款高性能JDK,使用它享受比OpenJDK或者OracleJDK更好的性能。 GraalVM的官方网址:https://www.graalvm.org/ 官方标语:Build faster, smaller, leaner applications。 更低的CPU…...
nacos1.4源码-服务发现、心跳机制
nacos的服务发现主要采用服务端主动推送客户端定时拉取;心跳机制通过每5s向服务端发送心跳任务来保活,当超过15s服务端未接收到心跳任务时,将该实例设置为非健康状态;当超过30s时,删除该实例。 1.服务发现 nacos主要采…...
C++ 2D平台游戏开发案例
关于2D平台游戏的C开发案例,包括游戏设计、实现细节、图形渲染和音效处理等内容。虽然无法一次性提供3000字,但我会尽量详细描述各个部分,并确保有足够的深度和广度。 2D平台游戏开发案例 一、游戏设计 游戏概述 游戏名称:“冒险…...
【Webpack--019】TreeShaking
🤓😍Sam9029的CSDN博客主页:Sam9029的博客_CSDN博客-前端领域博主 🐱🐉若此文你认为写的不错,不要吝啬你的赞扬,求收藏,求评论,求一个大大的赞!👍* &#x…...

Docker基本操作命令
Docker 是一个开源的应用容器引擎,允许开发者打包应用以及其依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。主要功能是为开发者提供一个简单…...

开源计算器应用的全面测试计划:确保功能性和可靠性
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
uni.requestPayment 支付成功之后会走 wx.onAppRoute
uni.requestPayment 是用于发起微信支付的统一接口,而 wx.onAppRoute 是用于监听小程序的路由变化。当 uni.requestPayment 支付成功后,如果发生了页面跳转或者其他路由变化,wx.onAppRoute 会被触发。这个行为是正常的,因为支付成…...

统⼀服务入口 - Gateway
网关介绍 问题 在 spring cloud 体系中我们通过 Eureka,Nacos 解决了服务注册,服务发现的问题,使⽤Spring Cloud LoadBalance解决了负载均衡的问题,使⽤ OpenFeign 解决了远程调⽤的问题. 但是当前所有微服务的接⼝都是直接对外暴露的,可以直接通过外部访问.为了保证对外服务的…...
QGraphicsWidget Class
Header:#include < QGraphicsWidget > qmake:QT += widgets Since:Qt 4.4 Inherits:QGraphicsObject and QGraphicsLayoutItem Inherited By:QGraphicsProxyWidget This class was introduced in Qt 4.4. Public Types enum anonymous {Type }Properties autoFi…...
探讨最好用的AI工具:从日常到创新的应用
文章目录 引言常用AI工具1. 语音助手2. 图像识别软件3. 机器翻译工具4. 智能客服系统 创新AI应用1. 自动驾驶汽车2. 虚拟试衣间3. 医疗影像分析4. 个性化推荐系统 个人体验分享1. 通义灵码2. 文心一言3. 智能写作助手4. 智能家居设备5. DALLE6. Whisper7. Codex8. Gym9. ChatGP…...

Python系统教程005(字符串的格式化输出)
知识回顾 1、默认情况下,input函数接收的数据是字符串类型。 2、字符串类型的关键词是str。 3、\n和\t都是转义字符,\n用来换行,\t用来留出一段固定长度的空白。 4、type函数能够用来查看变量的数据类型 5、数据类型的转换,举…...

六款电脑远程控制软件分享,2024最热门软件合集,总有一款适合你!速来看!
想要随时随地控制自己的电脑? 无论你是办公需求,还是要远程协助他人,一款好用的远程控制软件绝对少不了。 2024年最热门的六款远程控制软件已经为你准备好,总有一款适合你,赶快往下看吧! 1. 安企神系统—…...
优质微信群不再难寻!掌握这些技巧就够了!
在当今信息爆炸的时代,微信群已成为人们交流思想、分享知识、建立人脉的重要平台。无论是专业领域的深入探讨,还是兴趣爱好的自由交流,微信群都能为你提供一个即时互动的虚拟空间。然而,面对海量的微信群信息,如何高效…...
python - mysql操作
Python MySQL 操作 1. 背景介绍 常见的Mysql驱动介绍: MySQL-python:也就是MySQLdb。是对C语言操作MySQL数据库的一个简单封装。遵循了Python DB API v2。但是只支持Python2,目前还不支持Python3。mysqlclient:是MySQL-python的…...

基于Springboot+Vue的服装生产管理信息系统设计与实现(含源码数据库)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 在这个…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
用js实现常见排序算法
以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...